publicclassMain{publicstaticvoidmain(String[]args){finalThreadt1=newThread("PRIMEIRAThread"){public@Overridevoidrun(){System.out.println("APRIMEIRAthreadfoiinciaida...");for(inti=0;i<5;i++)waitOneSec(i);//vai demorar 5 segundos pra acabar de executar issoSystem.out.println("PRIMEIRAthreadfinalizada...");}};Threadt2=newThread("SEGUNDAThread"){public@Overridevoidrun(){System.out.println("ASEGUNDAthreadfoiinciaida...");if(t1.getState()==State.NEW)//se a 1° threat ainda não foi inciadat1.start();//inicia a 1° threadif(t1.getState()!=State.TERMINATED)//se a 1° thread ainda não acaboutry{t1.join();//fica aguarando ate a 1° thread acabar}catch(InterruptedExceptionex){}//so executa o restante do código depois que a thread 1 acabarfor(inti=0;i<2;i++)waitOneSec(i);//vai demorar 2 segundos pra acabar de executar issoSystem.out.println("SEGUNDAthreadfinalizada...");}};t1.start();t2.start();//<== mesmo iniciando a segunda}publicstaticvoidwaitOneSec(intcount){try{Thread.sleep(1000);//paraliza por 1 segundo a thread atual}catch(InterruptedExceptionex){//é precisa por entre Try Catch um comando de sleep}System.out.println((count+1)+"segundopassadona"+Thread.currentThread().getName());}}
veja na saida do console... que a thread 2 foi sim iniciada... conforme impressão, mas ela verificou que a 1 não tinha acabado, fez um "join()" para aguardar o final da 1, e so ai voltou a executar o restante de sua tarefa...
resultado do console
A PRIMEIRA thread foi inciaida...
A SEGUNDA thread foi inciaida...
1 segundo passado na PRIMEIRA Thread
2 segundo passado na PRIMEIRA Thread
3 segundo passado na PRIMEIRA Thread
4 segundo passado na PRIMEIRA Thread
5 segundo passado na PRIMEIRA Thread
PRIMEIRA thread finalizada...
1 segundo passado na SEGUNDA Thread
2 segundo passado na SEGUNDA Thread
SEGUNDA thread finalizada...
a msg de inicialização da segunda thread para sua JVM pode sair depois de 1 segundo ou 2, ou antes da primeira... mas verá q ela sera inciada logo... mas q o código depois do JOIN so vai iniciar, depois q a primeira thread terminar
R
RichardVaugh
Lavieri, muito obrigado pela sugestão !
Abraço !
L
Lavieri
RichardVaugh:
Lavieri, muito obrigado pela sugestão !
Abraço !
o segredo para esperar por outra thread é o método join()