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