Problemas com threads

2 respostas
D

Opa :smiley:

Tenho uma classe que deveria verificar se a thread já existe e se ela já existisse, ele deveria ser morta e começar uma nova thread, mas eu não c onsegui fazer e ela está com exceção de memória pq ela vai criando novas thread até a hora em que estoura a memória.

Alguém pode me ajudar pq não sei mais o q faezr pra verificar se a thread antiga existe ou não hehe

Mensageiro msg = new Mensageiro();
			msg.setMessage(message);
			Thread thread = new Thread(msg);
			if(thread.isAlive()) {
				thread.destroy();
				thread.start();		
			} 
			thread.start();

O sistema fica rodando e cada vez que vai enviar uam message, ele cria uma thread para mandar, mas qdo ele nao envia…a thread fica viva eternamente! hehe

2 Respostas

neohacker

Só uma brincadeirinha:
Fala com o camilolopes, ele vê Threads Mortos, ele deve saber como matar as Threads. :lol:

Bem na minha idéia uma thread deve “morrer” quando ele terminar de fazer o serviço dela, acho q ela está aguardando alguma coisa, posta a sua classe ai pra ver… num sou muito bom com threads, mas posso tentar…até pra aprender mais neh vlw

ViniGodoy

Ok... vamos lá.

Em primeiro lugar, você não deve parar uma thread usando o destroy. O método destroy está deprecated e pode deixar o seu sistema numa condição inválida. Para parar uma thread, faça com que o seu runnable finalize. Por exemplo:

public class MyRunnable extends Runnable {
   private volatile boolean stop = false;

   public void run() {
      while (!stop) {
         //Aqui fazemos alguma coisa
      }
   }

   public void stopMe() {
      stop = true;
   }
   public boolean isStopped() {
       return stop;
   }
}
MyRunnable task = new MyRunnable();
Thread t = new Thread(task);
t.start();

//Vamos parar a thread finalizando o Runnable.
if (!task.isStopped()) {
   task.stopMe();
   new Thread(task).start();
}

Em segundo lugar. Uma vez parada, você não pode reiniciar a thread com o start. Crie uma nova thread usando o new, como eu fiz ali em cima.

Dá uma olhadinha nesses tópicos, que falam sobre threads:
http://www.guj.com.br/posts/list/43061.java#228024
http://www.guj.com.br/posts/list/52481.java#276136
http://www.guj.com.br/posts/list/57781.java#303957

Criado 7 de maio de 2007
Ultima resposta 7 de mai. de 2007
Respostas 2
Participantes 3