Como parar uma Thread de imediato?

6 respostas
C

Oi gente,

estou tentando fazer operação e esperar até 5 minutos, são operações de rede.

O que eu quero basicamente é, executar um método, e se em 5 minutos não finalizar, será encerrado por timeout.

Classe teste que dispara execução:

OperacaoRede or = new OperacaoRede();
      Thread t1 = new Thread(or);
      t1.start();
      try {
            // 5 minutos para timeout
	    t1.sleep(5*60*1000);
      } catch (InterruptedException e) {
		e.printStackTrace();
      }
      t1.stop();

Classe que realiza a operação

public class OperacaoRede implements Runnable {
 
	public void run() {
		
		while(condicao) {
			// executa operação de rede que pode demorar muito		
		}	
	}
}

Nesse caso, como a thread está sleeping 5 minutos, mesmo que minha execução(método run) termine
em 2 minutos, a thread ficara dormindo mais 3 minutos até chegar no stop.

Como faço pra matar a thread de imediato que sair do run?

Se alguém tiver outra sugestão de implementação, o que eu preciso é executar um método
que dure até 5 minutos, ou seja, um tempo de timeout.

6 Respostas

E

public class OperacaoRede implements Runnable { public void run() { while(condicao) { executa operação de rede que pode demorar muito } t1.stop(); } }

Qual o problema?

C

EdicleoOliveira:
public class OperacaoRede implements Runnable { public void run() { while(condicao) { executa operação de rede que pode demorar muito } t1.stop(); } }

Qual o problema?

O seu código não funciona, a referência t1.stop() está em outra classe que é a executoria, nessa classe OperacaoRede não existe um this.stop();
E chamar o t1.stop(), ele só será executado após terminar o sleep(), esse é o problema.

P

Olá, carol_programadora

Coloque essa chamada depois do seu while

//Inicia o seu while
while(){
// Faz algo demorado
}
Thread.currentThread().stop(); // termina a Thread quando terminar o processo

Espero ter ajudado
Fallow

C

paulo1911:
Olá, carol_programadora

Coloque essa chamada depois do seu while

//Inicia o seu while
while(){
// Faz algo demorado
}
Thread.currentThread().stop(); // termina a Thread quando terminar o processo

Espero ter ajudado
Fallow

Obrigada, funcionou. Estou ainda engatinhando com esse assunto. :smiley:

E

Vc não especificou onde estava o t1, então imaginei estar na mesma classe, apesar do construtor da OperacaoRede ter modificador public, o que define isso em nova classe e nao tinha me percebido: falha minha.

É, Thread.currentThread().

P

Leia a apostila da Caelum fj11 é muito legal pra iniciar e ter uma visão de OO.
Fallow

Criado 18 de fevereiro de 2011
Ultima resposta 18 de fev. de 2011
Respostas 6
Participantes 3