[java-list] ThreadGroup
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
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
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
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.