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

3 respostas
R

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 !

3 Respostas

L
vc pode fazer assim
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("SEGUNDA Thread") {
            public @Override void run() {
                System.out.println("A SEGUNDA thread foi inciaida... ");
                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 < 2; i++)
                    waitOneSec(i); //vai demorar 2 segundos pra acabar de executar isso
                System.out.println("SEGUNDA thread finalizada...");
            }
        };
        t1.start();
        t2.start(); //<== 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) + " segundo passado na " + 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

Lavieri, muito obrigado pela sugestão !

Abraço !

L

RichardVaugh:
Lavieri, muito obrigado pela sugestão !

Abraço !

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

Criado 17 de maio de 2009
Ultima resposta 17 de mai. de 2009
Respostas 3
Participantes 2