Interromper processos no Java

5 respostas
D

Pessoal, estou com um problema:

eu tenho uma aplicação web que manda executar uma determinada sequencia de processos, exemplo:

valida um arquivo texto, insere em um banco de dados, atualiza essas informações e etc…

problema: se o usuario quiser, ele pode cancelar esses processos …

andei pesquisando algumas formas e disseram q uma forma de fazer isso é com threads, ou wrapper … uma vez que o java não tem nenhuma maneira de recuperar pids …

estou certo ??

alguem poderia me apontar alguma solução ??

agradeço pela atenção.

5 Respostas

marcosharbs

vc terá um processo
e dentro desse processo pode ter várias threads
diferente do C onde vc pode criar novos processos filhos
mas se pode trabalhar com thread sim
ai caso ele queira cancelar vc destroi aquela thread pq se destruir o processo todas as threads cairão junto

P
public class MyThread extends Thread {

    private boolean threadDone = false;

    public void done() {
        threadDone = true;
    }

    public void run() {
        while (!threadDone) {
            // work here
            // modify common data
        }
    }
}

http://www.devx.com/tips/Tip/31728

D

vlw pessoal

vou dar uma estudada em threads …

Marco_A_Caetano

pozzo… bem legal essa classe…
simples e eficaz

D

Pessoal, tentei essa implementação que o pozzo sugeriu, só que para o meu caso não serviu …

eu preciso de algo que funcione como se fosse o kill do linux …

então imaginem que eu tenho o seguinte :

public class LancaProcedimento extends Thread{

	private static LancaProcedimento instance = null;

	private boolean threadDone = false;

	public static LancaProcedimento getInstance(){
		if(instance == null) {
			instance = new LancaProcedimento();
			
			Thread t = instance;
			t.start();
		}

		return instance;
	}

	public void parar(){
		threadDone = true;
	}


	public void run(String arquivo,br.com.oside.AdminSaudePro.service.ServiceProcedimentos.TipoArquivo tipo,Connection conn, String continuar){
		ServiceProcedimentos sp = new ServiceProcedimentos();

		while(!threadDone){

			if("nao".equals(continuar)){
				try {
					sp.rodarProcedimentosComeco(arquivo, tipo, conn);
					threadDone = true;
				} catch (ParseException e) {
					for (StackTraceElement se: e.getStackTrace()) {
						System.out.println(se);
					}
				} catch (Exception e) {
					for (StackTraceElement se: e.getStackTrace()) {
						System.out.println(se);
					}
				}
			}
			
			if("sim".equals(continuar)){
				try {
					sp.rodarProcedimentos(arquivo, tipo, conn);
					threadDone = true;
				} catch (ParseException e) {
					for (StackTraceElement se: e.getStackTrace()) {
						System.out.println(se);
					}
				} catch (Exception e) {
					for (StackTraceElement se: e.getStackTrace()) {
						System.out.println(se);
					}
				}
			}

		}

	}




}

tem esse método : sp.rodarProcedimentosComeco(arquivo, tipo, conn);

supondo que eu queira cancelar ele ( enquanto ele estiver rodando ), com esse esquema de while( true ), num funciona, pq ele só vai verificar a variavel depois que ele já tiver terminado a execução do metodo em questão …

alguem tem alguma outra idéia??

vlw

abraços

Criado 8 de setembro de 2009
Ultima resposta 9 de set. de 2009
Respostas 5
Participantes 4