em um lugar de meu algoritmo eu preciso disparar várias Threads, porém eu não posso deixar o algoritmo continuar enquanto todas as Threads não tiverem terminado…
em tenho um array de Threads e somente depois que todas tiverem terminado o algoritmo pode continuar, pois ele depende do trabalho de todas as Threds…
importjava.util.*;publicclassTestThread{privatestaticintlock=0;publicTestThread(){OutputThreadt1=newOutputThread("AAAAAA");OutputThreadt2=newOutputThread("BBBBBB");t1.start();t2.start();// parte que precisa esperar as threadswhile(lock!=0);// pode executarSystem.out.println("possoexecutar........");}publicstaticvoidmain(Stringargv[]){TestThreadtest=newTestThread();System.out.println("acabou............");}classOutputThreadextendsThread{OutputThread(Stringname){super(name);lock++;}publicvoidrun(){try{inttempo=0;for(inti=0;i<5;i++){System.out.println(getName());RandomtRand=newRandom();tempo=tRand.nextInt(5);// dorme durante um tempo;Thread.sleep(1000*(tempo));}// diz que acabou .lock--;}catch(Exceptione){System.out.println(e.getMessage());}}}}
talvez isso possa resolver seu problema. :idea:
louds
mandrade81, seu algoritmo pode falhar dado que ++ e – não são operações atômicas no java (podem acontecer pela metade). Outro problema é que voce espera pelas threads via busy-wait, oque consome cpu em demasia.
ricardo, oque voce provavelmente precisa é do método Thread.join:
É claro que poderia ser usado um bloco synchronized nos incrementos e decrementos. Mas o código já está um lixo (espera-ocupada e cia), para que piorar (hehehe…)