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� uma conferida 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:51
Para: [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 filho
Objeto=Obj;    // passa o q procura
NumFilho = 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 grupo
 u.start();
  
 NumFilho--;
 if (NumFilho > 0 ){ // se tiver mais filho cria outra  thread
 BuscaThread 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 outras
  GrupoThreads.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
}
<<<<

Valeu
Yvan


Yahoo! PageBuilder - O super editor para cria��o de sites: � gr�tis, f�cil e r�pido.

Responder a