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.