Criei uma thread que fica rodando dentro de um loop e tenho uma condicao que eu deveria matar/terminar ela. Alguem pode me dar uma luz de como eu faco para matar essa thread?
Utilizo Java 6 e tudo que eu consigo fazer, é chamar um sleep pra ela :oops:
publicclassBuscaFuncionarioimplementsRunnable{publicvoidrun(){booleanenvioMail=false;while(envioMail==false){envioMail=true;try{logger.info("Preparando para adormer Thread");Thread.sleep(3*1000);logger.info("Thread Adormecida com Sucesso");}catch(InterruptedExceptione){logger.error("Ocorreu um erro ao adormecer a thread: "+e);e.printStackTrace();}}//momento de matar ou terminar a thread}}
try {
while (!Thread.interrupted()) {
//resto do código
}
} catch (InterruptedException e) {
logger.info("Thread interrompida!");
}
Depois, de fora dessa thread, é só chamar o método interrupt. Ele vai sair do sleep, wait, socketchannel ou qualquer outro lugar que a thread esteja adormecida e lançar uma interrupted exception (que não é necessariamente um erro). Se vc deu o interrupt fora do while, Thread.interrupted() vai retornar true.
Outra opção é criar um método na classe BuscaFuncionario que retorne false, e faça a thread sair do while. Para que uma thread pare, basta que o código saia do método run().
W
wellingtonfoz
ViniGodoy:
Você pode fazer o seu while assim:
try {
while (!Thread.interrupted()) {
//resto do código
}
} catch (InterruptedException e) {
logger.info("Thread interrompida!");
}
Depois, de fora dessa thread, é só chamar o método interrupt. Ele vai sair do sleep, wait, socketchannel ou qualquer outro lugar que a thread esteja adormecida e lançar uma interrupted exception (que não é necessariamente um erro). Se vc deu o interrupt fora do while, Thread.interrupted() vai retornar true.
Outra opção é criar um método na classe BuscaFuncionario que retorne false, e faça a thread sair do while. Para que uma thread pare, basta que o código saia do método run().
se eu instanciei uma thread q tem um atributo boolean parar = false; e no meio do programa eu dei true pra esse parar e a thread terminou de executar… quando eu for dar um start nela de novo posteriormente… o atributo parar vai estar com o valor true ou false ? (isto é, a thread fica com os ultimos valores ou inicia zerada?)
A
AnyDev
wellingtonfoz:
ViniGodoy:
Você pode fazer o seu while assim:
try {
while (!Thread.interrupted()) {
//resto do código
}
} catch (InterruptedException e) {
logger.info("Thread interrompida!");
}
Depois, de fora dessa thread, é só chamar o método interrupt. Ele vai sair do sleep, wait, socketchannel ou qualquer outro lugar que a thread esteja adormecida e lançar uma interrupted exception (que não é necessariamente um erro). Se vc deu o interrupt fora do while, Thread.interrupted() vai retornar true.
Outra opção é criar um método na classe BuscaFuncionario que retorne false, e faça a thread sair do while. Para que uma thread pare, basta que o código saia do método run().
se eu instanciei uma thread q tem um atributo boolean parar = false; e no meio do programa eu dei true pra esse parar e a thread terminou de executar… quando eu for dar um start nela de novo posteriormente… o atributo parar vai estar com o valor true ou false ? (isto é, a thread fica com os ultimos valores ou inicia zerada?)
Caso eu estiver errado me corrijam.
o metodo start() da Threard executa o metodo Run() da classe?
executando uma vez ate que parar == false, caso você execute novamente o metodo start() o parar continuara com o valor false.
ViniGodoy
Sim, ele cria uma nova Thread, que começa no método run.
Você não pode chamar start() 2 vezes.
W
wellingtonfoz
Sim, ele cria uma nova Thread, que começa no método run.
Você não pode chamar start() 2 vezes.
Mas se minha thread terminou de executar? Mesmo assim não posso usar start() de novo pra ela começar de novo?
ViniGodoy
Mesmo assim. Você terá que dar um new Thread novamente. O que você pode reaproveitar é o Runnable.