Iniciar nova instancia de uma thread caso ela finalize

3 respostas
threadsjava
D

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.

Desde já agradeço.

Dante Martins

3 Respostas

R

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

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

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.

Criado 18 de novembro de 2016
Ultima resposta 6 de dez. de 2016
Respostas 3
Participantes 2