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