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("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());
}
}[/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()