Uma ajuda. Tenho uma aplicação que lança uma Thread que realiza vários processos dentre eles acesso a banco de dados. Essa Thread demora muito tento em execução. De tempos em tempos preciso verificar se ela está rodando e caso não esteja, disparo ela novamente para realizar o mesmo processo porem para outros dados.
Primeira pergunta: como saber se Thread está rodando? Logicamente, use o ?isAlive()?.
Entretanto, verifiquei que em alguns casos mesmo a Thread rodando o método ?isAlive()? está retornando ?false? indicando que o Thread não está rodando. Contudo, está errado.
Essa Thread acessa o banco de dados e fica aguardando durante muito tempo; entretanto, mesmo nesse momento o método ?isAlive()? deveria retornar false, ou estou errado?
Sim, de acordo com o javadoc, o método isAlive deve retornar true se a thread foi iniciada e ainda não terminou o método run:
Pergunto:
Você realiza a chamada ao isAlive() nesta thread e o mesmo retorna false. Depois de algum tempo, vc verifica que esta thread ainda está executando? Chama o isAlive de novo e o mesmo retorna true?
uma sugestão seria programar um timer para lançar essa thread de tempos em tempos.
V
ViniGodoy
Ao invés de ficar fazendo pooling no isAlive(), é melhor programar sua thread para avisar quando morreu. Para isso, use o padrão observer para que a thread que atua sobre o BD tenha como listener o objeto da thread que a disparou, e avise-a quando a operação terminar. Aí fica bem fácil saber se a execução já terminou ou não.
Outra vantagem é que você também pode programar o seu listener para disparar informações de status, para fazer uma barra de rolagem andar, por exemplo.
B
Beavis_
Algum problema em utilizar o t.getState() == Thread.State.TERMINATED;
Sempre utilizo e aparentemente funciona.
M
marciano1
rod.attack:
Sim, de acordo com o javadoc, o método isAlive deve retornar true se a thread foi iniciada e ainda não terminou o método run:
Pergunto:
Você realiza a chamada ao isAlive() nesta thread e o mesmo retorna false. Depois de algum tempo, vc verifica que esta thread ainda está executando? Chama o isAlive de novo e o mesmo retorna true?
uma sugestão seria programar um timer para lançar essa thread de tempos em tempos.
>>Você realiza a chamada ao isAlive() nesta thread e o mesmo retorna false.
Sim
>>Depois de algum tempo, vc verifica que esta thread ainda está executando? Chama o isAlive de novo e o mesmo retorna true?
Eu chamo novamente, ele está rodando, mas o método retorna false indicando que não está rodando.
Tenho um objeto X e dentro dele verifico se a thread está rodando. O objeto X é um job