Interromper threads bloqueadas sem causar excessão
Olá, galera :D
A situação é a seguinte:
Eu tenho quatro threads em meu programa, mas todas executam em loop infinito... http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif
Na verdade, pra que elas não fiquem executando para sempre, eu não faço um while(true), e sim um while(algumacoisa) e na hora que eu quero que essas threads terminem, eu faço algumacoisa = false...
O problema é que uma das threads utiliza uma LinkedBlockingQueue e, como o nome diz, ela bloqueia a thread acessando ela em determinadas situações...
Além disso, outra faz uso de DatagramSockets. Então, eu fico nesse "loop infinito" esperando pacotes da rede (outro bloqueio)... <_<
Então, para que eu possa realmente fechar essa thread, eu acabo tendo que usar o método shutdownNow() de ExecutorService para forçar ela a fechar. Só que assim, eu acabo lançando uma InterruptedException na thread acessando a LinkedBlockingQueue e uma SocketException por ter que fechar o socket enquanto eu ainda estou esperando um pacote da rede.
Sendo que eu, num futuro próximo, posso restabelecer esse cenário de execução de threads, o que pode levar a mais exceções pipocando na minha tela.
Alguém tem uma solução sem gambiarras para isso, por favor? http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
Discussão (4)
Carregando comentários...