Como parar uma Thread de imediato?

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.

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

Qual o problema?

[quote=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?[/quote]

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.

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

[quote=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[/quote]

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

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().

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