Executar duas Threads em ordem - Uma após a outra

Pessoal, boa noite !

Estou com uma dúvida, e já estou pesquisando, mas não descobri como faço pra executar uma Thread após outra.
Tenho as minhas threads dessa forma:

Thread t1 = new Thread(){
public void run(){

}
}

Thread t2 = new Thread(){
public void run(){

}
}

Alguém tem alguma sugestão ou conhece um guia rápido/tutorial legal ?

Obrigado !

vc pode fazer assim

[code]public class Main {
public static void main(String[] args) {
final Thread t1 = new Thread("PRIMEIRA Thread") {
public @Override void run() {
System.out.println("A PRIMEIRA thread foi inciaida… ");
for (int i = 0; i < 5; i++)
waitOneSec(i); //vai demorar 5 segundos pra acabar de executar isso
System.out.println("PRIMEIRA thread finalizada…");
}
};

    Thread t2 = new Thread(&quot;SEGUNDA Thread&quot;) {
        public @Override void run() {
            System.out.println(&quot;A SEGUNDA thread foi inciaida... &quot;);
            if (t1.getState() == State.NEW) //se a 1° threat ainda não foi inciada
                t1.start(); //inicia a 1° thread
            if (t1.getState() != State.TERMINATED) //se a 1° thread ainda não acabou
                try {
                    t1.join(); //fica aguarando ate a 1° thread acabar
                } catch (InterruptedException ex) {}
            //so executa o restante do código depois que a thread 1 acabar
            for (int i = 0; i &lt; 2; i++)
                waitOneSec(i); //vai demorar 2 segundos pra acabar de executar isso
            System.out.println(&quot;SEGUNDA thread finalizada...&quot;);
        }
    };
    t1.start();
    t2.start(); //&lt;== mesmo iniciando a segunda
}

public static void waitOneSec(int count) {
    try {
        Thread.sleep(1000); //paraliza por 1 segundo a thread atual
    } catch (InterruptedException ex) {
        //é precisa por entre Try Catch um comando de sleep
    }
    System.out.println((count+1) + &quot; segundo passado na &quot; + Thread.currentThread().getName());
}

}[/code]

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

[quote]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…[/quote]

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

1 curtida

Lavieri, muito obrigado pela sugestão !

Abraço !

[quote=RichardVaugh]Lavieri, muito obrigado pela sugestão !

Abraço ![/quote]

o segredo para esperar por outra thread é o método join()