Pessoal quando eu uso o Thread.activeCount() me retorna o numero de threads ativas na app.
Com isso eu pego a thread que eu quero dessa forma:
Thread.enumerate(threads);
for (Thread thread : threads) {
if (thread.getName().equalsIgnoreCase("JOB 1")) {
thread.interrupt();
}
}
Mas quando eu testo novamente o Thread.activeCount() a thread interrompida está nas Ativas, tem como eu interromper e inativar a thread pra ela nao vir dentro do grupo da activeCount() ?
Pessoal quando eu uso o Thread.activeCount() me retorna o numero de threads ativas na app.
Com isso eu pego a thread que eu quero dessa forma:
Thread.enumerate(threads);
for (Thread thread : threads) {
if (thread.getName().equalsIgnoreCase("JOB 1")) {
thread.interrupt();
}
}
Mas quando eu testo novamente o Thread.activeCount() a thread interrompida está nas Ativas, tem como eu interromper e inativar a thread pra ela nao vir dentro do grupo da activeCount() ?
Você não pode inativar um thread e achar que ela vai parar sem antes terminar o que ela tinha de fazer. A thread pŕecisa terminar o trabalho e depois parar. Talvez seja por isso que a contagem ainda mostra o recurso que deveria estar descarregado naquele momento.
evertonsilvagomesjav
Mas a ideia é ela não terminar mais o que tinha que fazer, era pra abortar mesmo e não fazer mais nada. O interrupt() esta fazendo isso, pelo menos acho que esta.
G
GabrielMantini
Tem vários métodos para “matar” uma thread, procura na documentação que você acha.
ViniGodoy
O pior é que não acha, porque isso que você falou não existe. Ou melhor, até existe, mas é deprecated.
Everton, no caso o interrupt() vai fazer todas as chamadas a wait(), sleep() e similares dispararem a tal InterruptedException. Você deve programar sua thread para que, no caso de uma exceção dessas, ela pare.
Além disso, é interessante também colocar o while da sua thread assim:
Note que assim a Thread irá parar (em pouco tempo). O InterruptedException tira a thread do while e, caso a thread não esteja num wait() ou sleep(), o while é interrompido no próximo laço. Assim também a thread limpa elegantemente os recursos (fecha conexões de banco, arquivos, etc) antes de finalizar.
J
juliocbq
O pior é que não acha, porque isso que você falou não existe. Ou melhor, até existe, mas é deprecated.
Everton, no caso o interrupt() vai fazer todas as chamadas a wait(), sleep() e similares dispararem a tal InterruptedException. Você deve programar sua thread para que, no caso de uma exceção dessas, ela pare.
Além disso, é interessante também colocar o while da sua thread assim:
Note que assim a Thread irá parar (em pouco tempo). O InterruptedException tira a thread do while e, caso a thread não esteja num wait() ou sleep(), o while é interrompido no próximo laço. Assim também a thread limpa elegantemente os recursos (fecha conexões de banco, arquivos, etc) antes de finalizar.
Isso. O laço em execução não é interrompido para não quebrar o programa. Dessa maneira leva certo tempo para ela parar de forma segura(e dependendo da tarefa isso leva alguns segundos). Imagino que por isso ele esteja vendo o recurso alocado ainda.
evertonsilvagomesjav
Opa, Vinicius bom dia. Tentando seguir como vc falou eu tenho o trecho de codigo onde a execução deve parar
Como esse InterruptedException e checked como vou usa-lo ai? Sendo que nada vai disparar ele no try-catch, o compilador não deixa.
A outra coisa é que, quem vai parar essa Thread que executa esse método é outra Thread com isso esse método em execução poderia parar em qualquer parte, ao chamar o interupt() dessa Thread isso acontece certo? Acho que não precisaria desse while