Duvida em Thread

			Mensageiro msg = new Mensageiro();
			msg.setMessage(message);
			Thread thread = new Thread(msg);
			if(thread.isAlive()) {
				thread.destroy();
				thread.start();
				JOptionPane.showMessageDialog(null, "entrou no destroy","ah",0);
			} else {
				thread.start();	
			}

Opa :smiley:

Alguém pode me dizer se esse código acima está correto? Pq parece que ele não entra nunca no if

David, olha o que diz a API java quanto a isso.

isAlive
public final boolean isAlive()
Tests if this thread is alive. A thread is alive if it has been started and has not yet died.
Returns:
true if this thread is alive; false otherwise.

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html

Até…

Há uma série de problemas nesse código.

  1. Você não deu start(). Como sua thread não está rodando, isAlive() vai retornar false.

  2. O método destroy() é deprecated e não deveria ser usado. Seu código fica sujeito a deadlocks, objetos podem ser deixados em estados inválidos, etc.

  3. Uma vez parada, a thread não pode ser reiniciada.

primeiro pq vc nao colocou sua thread no modo executavel dando um start() e entao isAlive() retorna false ja que nao existe nenhuma thread em execucao, veja que antes do metodo isAlive() vc definiu a instancia… entao nada roda ai alem do main…

mas a intenção dessa thread era verificar se ela existe, caso ela exista, eu mato ela e dou um start() de novo…não está certo o q estou fazendo?

pq essa thread está em um método que vai ocorrer várias vezes na execução e as vezes ele pode não terminar até ser chamada outra thread, então eu mataria a thread e começaria ela de novo…

Sim, mas uma thread que ainda não foi iniciada não existe, pelo menos para o isAlive…

mas desse jeito ele funciona né? só a primeira vez que vai entrar como false…ou toda vez que faço o:

Thread thread = new Thread(msg);

vou estar criando uma instância nova e apagar a antiga que existe??

Dá uma olhada nesses tópicos. Eles mostram como fazer para evitar o método destroy.

http://www.guj.com.br/posts/list/52481.java#276164
http://www.guj.com.br/posts/list/43061.java#228024

Para criar uma nova thread você faz:
Thread t = new Thread(msg);
t.start();

É o start que dispara a thread. Depois disso, usa as técnicas descritas no link para para-la, mas nunca, em hipótese alguma, o método destroy().

Uma vez parada, uma thread não pode ser reiniciada, você terá que iniciar uma thread nova, dando um new e um start novamente.