Como manipular threads

13/07/2010

0

Bom pessoal, sei que é um assunto batido, mas tudo que eu lí não serviu para me eclarecer totalmente.

É o seguinte:

Tenho um objeto que extende Thread.

Este objeto possui um CopyOnWriteArrayList.

Dentro do run eu testo se tem algum item neste array, caso possua, faço alguma coisa, caso não possua, eu paro a thread.

Tenho um método que adiciona objetos neste CopyOnWriteArrayList, e este método além de inserir um ojeto neste array, deve verificar se a thread está parada, caso a thread esteja parada eu devo inicia-la.

Simples não ?

Porém isto tem me dado uma dor de cabeça. O método stop da thread está depreciado. Aconselharam utilizar um boolean para fazer este processo, porém me gera excessão.


Ex.:
public class Xpto extends Thread {
boolean estaViva = false;
CopyOnWriteArrayList<Pessoa> colecaoDePessoas = new CopyOnWriteArrayList<Pessoa>();

public addObjetoNoCopyOnWriteArrayList( Pessoa pessoa ){
  colecaoDePessoas.add( pessoa );
   
  if( !estaViva ){
    estaViva = true;
    this.start();
  }

}

 public void run(){
  while( estaViva ){
   if ( colecaoDePessoas.isEmpty()  ){
       estaViva = false;
      // this.interrupt();
      // this.wait();
     return;
   }else{
    // Faz alguma coisa com o objeto pessoa
    colecaoDePessoas.remove(0);
   }
  }
 }

}


A questão é: Iniciei a aplicação, criei o objeto Xpto, e dei um start na thread. Porém ela deve ficar parada até que algum objeto seja adicionado no array "colecaoDePessoas".
Quando esse array "colecaoDePessoas " recebe um objeto, deve testar se a thread está rodando, caso não esteja devo inicia-la.
No run(), após utilizar o objeto da "colecaoDePessoas", removo da lista, e quando o array ficar vazio devo parar a thread.

Alguém sabe alguma maneira de fazer isso funcionar de forma elegante e segura ?

Obrigado desde já.
Fernando Figueiredo

Fernando Figueiredo

Responder

Posts

15/07/2010

Dyego Carmo

Opa !


No meu devspace tem uma video aula sobre threads que abordo este problema...

Baixe lá !

Valeuz !

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar