Iniciar nova instancia de uma thread caso ela finalize
3 respostas
threadsjava
D
dmgamer
Olá!
Necessito monitorar a execução de algumas threads e caso alguma finalize, preciso iniciar uma nova instância.
Como sou iniciante estou um pouco sem saber como proceder…
Procurei algum tópico relacionado a isso mas não encontrei, por isso abri esse aqui.
As threads estão lendo dados de uma tabela e transmitindo via WebService, eventualmente a conexão fica instável e/ou cai (4G vivo) e a thread é finalizada, mas acontecem algumas situações não identificadas (ainda) que provocam a finalização das threads, por isso gostaria de implementar tipo um “observer” que ficaria monitorando o estado de uma thread, caso ela morresse, seria levantada uma nova instância.
Talvez seja o caso de thread fica “presa” ao invés de ser interrompida, presa esperando algum dado que nunca chega devido a queda da conexão. Você pode talvez implementar um time out, se uma das pontas não se manifestar em x tempo, você interrompe e tenta de novo, ou implementar algum “ping pong”.
D
dmgamer
Olá Ricardo, obrigado pela resposta!
Estou aposta num exceção não tratada que está provocando o termino da thread, mas não tenho certeza…
Ainda assim teria que ter “alguém cuidando das threads” para controla esse time out, certo ?
D
dmgamer
Agora já tenho certeza de qual é o problema do serviço parar de funcionar, mas ainda não encontrei uma solução.
A integração está sendo feita através de um Webservice, quando inicia a thread é feita uma “conexão”, que é um proxy para consumir os métodos do mesmo.
Acontece da conexão cair e o próximo envio ao ws fica sem retorno e a thread fica aguardando indefinidamente…
Como nessa situação preciso parar e reiniciar essa thread, imagino que eu tenha que ter uma segunda thread que fique monitorando a primeira e caso ela tenha parado de transmitir, eu finalizo e reinicio ela.
Foi utilizado java.util.concurrent.ScheduledExecutorService para gerenciar as threads, armazenando as ScheduledFuture<?> em um ArrayList.
Não sei ao certo como conseguir acesso as threads para verificar seu status.