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