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.:
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á.
É 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
Curtir tópico
+ 0
Responder
Posts
15/07/2010
Dyego Carmo
Opa !
No meu devspace tem uma video aula sobre threads que abordo este problema...
Baixe lá !
Valeuz !
No meu devspace tem uma video aula sobre threads que abordo este problema...
Baixe lá !
Valeuz !
Responder
Clique aqui para fazer login e interagir na Comunidade :)