[java-list] ThreadGroup

2003-06-01 Por tôpico Daniel
Boas !!

Galera estou inicializando 5 thread de uma única vez e coloca elas dentro de
um ThreadGroup .
Meu problema é o seguinte dentro de uma outra classe eu tento controlar a
execução destas threads , para isso estou utilizando o activeGroup() quando
o return deste método for = 0 então eu colocaria mais 5 threads . esse é um
exemplo do que eu fiz .

// trecho da classe que dispara as threads

ThreadGroup teste = new ThreadGroup(TESTE);
public void verificaGrupo(){
while(teste.activeGroup()!=0) ;
}

// trecho da classe que controla as threads (OU DEVERIA )

..


if (i==5){
classe.quedisparaThreads();
classe.verificaGrupo();
i=0;
}
i++;

só que quando chamo o método verificaGrupo() ele consome 100% da cpu .


alguém tem algum idéia de como resolver isso , ou controlar isso de outra
maneira

Valeu !!






-- LISTA SOUJAVA  
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED] 
-



[java-list] threadGroup

2002-08-20 Por tôpico Yvan Almeida
estou fazendo uma busca em arvore usando threads.. cada filho da raiz é uma thread. Quando uma das threads acha o q eu procuro retorna TRUE, e assim parar todas outras threads...Para isto eu criei um ThreadGroup q tem todas threads e qd uma acha dá um interrupt no threadgroup... mas naum está funcionando, pois qd interrompe uma thread ela retorna false mudando o resultado final.Gostaria de saber se como usei o GrupoThreads.interrupt(); funciona mesmo, se todas threads são interrompidas e naum voltam para execução?E tb se tem alguma forma de testar se uma thread, individual, foi interrompida antes de terminar a busca?
Código:public class BuscaThread{public boolean BuscaReturn; public Object Objeto;public int NumFilho;public ThreadGroup GrupoThreads = new ThreadGroup("GrupoThreads");
public BuscaThread(Object Obj,Link Linkar,int NFilho) { Links=Linkar; // passa o filhoObjeto=Obj; // passa o q procuraNumFilho = NFilho; // numero de filhos que ainda tem} 
public boolean BuscaThread(){//retorna o resultado final
RodaThread Um=new RodaThread(Objeto,Links,NumFilho); Thread u=new Thread(GrupoThreads,Um,"GrupoThreads");// cria thread no grupou.start();NumFilho--; if (NumFilho  0 ){ // se tiver mais filho cria outra threadBuscaThread xx= new BuscaThread(Objeto,PEGA_IRMAO,NumFilho); xx.BuscaThread();}
try { u.join(); BuscaReturn=Um.BuscaThreadReturn;if(BuscaReturn){ // qd acaba de rodar a thread verifica se // é true para interromper as outrasGrupoThreads.interrupt();return BuscaReturn; }} catch (InterruptedException ignorada) { } 
return BuscaReturn; // se não entrou no if, é false q retorna} 
}
public class RodaThread implements Runnable { public boolean BuscaThreadReturn; ... FAZ A BUSCA}
ValeuYvan
Yahoo! PageBuilder - O super editor para criação de sites: é grátis, fácil e rápido.

RES: [java-list] threadGroup

2002-08-20 Por tôpico Gaucho



sinceramente acho que tem que pensar nessa heurística 
de criar várias threads para realizar busca na mesma 
árvore

pelo 
custo de alocação de CPU pelas threads, e controle do ThreadGroup.. acho que no 
final, vai custar, no mínimo, a mesma coisa que apenas uma 
thread

não 
sei como está montando a tua árvore.. mas talvez essa heurística esteja 
atrapalhando mais do que ajudando. Independente disso, a parada de threads não é 
imediata através do ThreadGroup.

dá 
umaconferida na documentação sobre Threads.
e 
também na classe DefaultMutableTreeNode, que já tem implementado as rotinas 
clássicas de busca em árvore...

Dependendo do problema, pode ser possível criar a 
árvore de uma maneira que otimize a busca





-Mensagem 
original-De: Yvan Almeida 
[mailto:[EMAIL PROTECTED]]Enviada em: terça-feira, 20 de agosto 
de 2002 08:51Para: [EMAIL PROTECTED]Assunto: 
[java-list] threadGroup

  estou fazendo uma busca em arvore usando threads.. cada filho da raiz é uma 
  thread. Quando uma das threads acha o q eu procuro retorna TRUE, e assim parar 
  todas outras threads...Para isto eu criei um ThreadGroup q tem todas 
  threads e qd uma acha dá um interrupt no threadgroup... mas naum está 
  funcionando, pois qd interrompe uma thread ela retorna false mudando o 
  resultado final.Gostaria de saber se como usei o GrupoThreads.interrupt(); 
  funciona mesmo, se todas threads são interrompidas e naum voltam para 
  execução?E tb se tem alguma forma de testar se uma thread, individual, foi 
  interrompida antes de terminar a busca?
  Código:public class BuscaThread{public 
  boolean BuscaReturn; public Object Objeto;public int 
  NumFilho;public ThreadGroup GrupoThreads = new 
  ThreadGroup("GrupoThreads");
  public BuscaThread(Object Obj,Link Linkar,int NFilho) { 
  Links=Linkar; // passa o filhoObjeto=Obj; // 
  passa o q procuraNumFilho = NFilho; // numero de filhos que ainda tem} 
  
  public boolean BuscaThread(){//retorna o resultado final
  RodaThread Um=new RodaThread(Objeto,Links,NumFilho); Thread 
  u=new Thread(GrupoThreads,Um,"GrupoThreads");// cria thread no 
  grupou.start();NumFilho--; if 
  (NumFilho  0 ){ // se tiver mais filho cria outra 
  threadBuscaThread xx= new BuscaThread(Objeto,PEGA_IRMAO,NumFilho); 
  xx.BuscaThread();}
  try { u.join(); 
  BuscaReturn=Um.BuscaThreadReturn;if(BuscaReturn){ // qd 
  acaba de rodar a thread verifica se // é true para 
  interromper as 
  outrasGrupoThreads.interrupt();return 
  BuscaReturn; }} catch 
  (InterruptedException ignorada) { } 
  return BuscaReturn; // se não entrou no if, é false q retorna} 
  
  }
  public class RodaThread implements Runnable { public boolean 
  BuscaThreadReturn; ... FAZ A BUSCA}
  ValeuYvan
  
  
  Yahoo! 
  PageBuilder - O super editor para criação de sites: é grátis, fácil e 
  rápido.


[java-list] threadGroup

2002-08-16 Por tôpico Yvan Almeida
estou fazendo uma busca em arvore usando threads, cada filho da raiz será uma thread..estou querendo usar threadGroup para qd uma thread achar o DADO a ser procurado para todas outras..
o código é mais ou menos assim:public class BuscaThread{public Object Objeto;public int NumFilho;public ThreadGroup GrupoThreads = new ThreadGroup("GrupoThreads");
public BuscaThread(Object Obj,int NFilho) { Objeto=Obj; // passa o q procuraNumFilho = NFilho; // numero de filhos que ainda tem} 
public boolean BuscaThread(){RodaThread Um=new RodaThread(Objeto); System.out.println( "1 - Numero de THREADS ATIVOS(GRUPO) "+ GrupoThreads.activeCount());Thread u=new Thread(GrupoThreads,Um,"GrupoThreads");u.start();System.out.println( "2 - Numero de THREADS ATIVOS(GRUPO) "+ GrupoThreads.activeCount());
NumFilho--; if (NumFilho  0 ){ BuscaThread xx= new BuscaThread(Objeto,NumFilho);  xx.BuscaThread();}return Um.BuscaThreadReturn;} 
}
public class RodaThread implements Runnable { 
public RodaThread(Object d) { Inicializa} 
public void run() { FAZ A BUSCA} }

o problema foi que fiz um teste e acho q naum deu certo, onde ele escreve System.out.println( "1 - Numero de THREADS ATIVOS(GRUPO) "+ GrupoThreads.activeCount());System.out.println( "2 - Numero de THREADS ATIVOS(GRUPO) "+ GrupoThreads.activeCount());o 1 ele sempre mostra como resultado o nº 0o 2 ele sempre mostra como resultado o nº 1independente de quantas threads estão criadas e rodando..O programa roda e da o resultado certo, mas naum sei se estou passando todas threads para o grupo corretamente.. ta certo?
ValeuYvan
Yahoo! PageBuilder - O super editor para criação de sites: é grátis, fácil e rápido.