Olá Fabiano, tenta algo como o codigo abaixo:
//inicia threads 1, 2 e 3
tA1.start();
tA2.start();
tA3.start();
//So apos iniciar as tres primeiras threads chama os joins,
//caso seus metodos estejam corretamente implementados as
//threads 1, 2 e 3 vao estar rodando em turnos (cuidado com situacoes de deadlock).
//indica que a principal deve esperar a thread 1 acabar antes de voltar ao estado de runnable
tA1.join();
//indica que a principal deve esperar a thread 2 acabar
tA2.join();
//indica que a principal deve esperar a thread 3 acabar
tA3.join();
//nesse ponto as 1, 2 e 3 ja acabaram e as 4 e 5 sao iniciadas
tA4.start();
tA5.start();
//Novamente, so apos iniciar as threads 4 e 5 chama os joins
tA4.join();
tA5.join();
//inicia a 6 apos acabar a 4 e a 5
tA6.start();
E no caso do seu outro e-mail, se vc mudasse o codigo de:
while(tA1.isAlive() && tA2.isAlive() && tA3.isAlive(){
}
para o codigo abaixo, onde vc muda os "&&" para "||":
while(tA1.isAlive() || tA2.isAlive() || tA3.isAlive(){
//so para garantir que as outras threads terao seus turnos
try {
Thread.sleep(100);
}
catch (InterruptedException ex) {
}
}
Surtiria efeito similar, mas como vc não precisa que a thread principal rode, a primeira abordagem é a mais natural.
O capitulo 9 do likvro "SCJP Sun Certified Programmer for Java 6 Study Guide" explica alguns conceitos de threads, vale a pena dar uma olhada.
Seguem abaixo tbm alguns links com alguns bons exemplos:
Exemplos de join: http://www.java2s.com/Code/JavaAPI/java.lang/ThreadjoinUsingjointowaitforthreadstofinish.htm e
http://www.java2s.com/Code/Java/Threads/Understandingjoin.htm
Outros exemplos com threads no msm site: http://www.java2s.com/Code/Java/Threads/Simple-Threads.htm
e http://www.java2s.com/Code/Java/Threads/CatalogThreads.htm
Espero ter ajudado.
Att,
Rafael
--- Em sáb, 28/8/10, Fabiano Netto <fabianolistas@gmail.com> escreveu:
De: Fabiano Netto <fabianolistas@gmail.com>
Assunto: Re: [java-br] Problema com multithread
Para: java-br@yahoogrupos.com.br
Data: Sábado, 28 de Agosto de 2010, 15:27
Pedro
O If acho que não, talvez um while
Tentei ate algo do tipo
while(tA1.isAlive() && tA2.isAlive() && tA3.isAlive(){
}
Mas acontece que ao acabar as threads 2 e 3 ele ja continuou e não esperou a
tA1 acabar
Valeu
Em 28 de agosto de 2010 15:11, Pedro Henrique Castro Silva <
phcastro03@yahoo.com.br> escreveu:
>
>
> Amigo nunca trabalhei com thread`s, mas no caso um if após disparar a 3
> thread e
> finalizá-la não funciona?
>
> Abraço
>
> ________________________________
> De: Fabiano Netto <fabianolistas@gmail.com <fabianolistas%40gmail.com>>
>
> Para: java-br@yahoogrupos.com.br <java-br%40yahoogrupos.com.br>
> Enviadas: Sábado, 28 de Agosto de 2010 15:00:26
> Assunto: [java-br] Problema com multithread
>
>
> Pessoal,
>
> É o seguinte, estou precisando resolver uma situação e não achei nos sites
> de java algo didaticamente facil de entender
>
> Vou tentar reproduzir aqui minha situação.
>
> Tenho uma classe A que possui 6 métodos, que chamarei aqui de a1, a2, a3,
> a4, a5 e a6
>
> Já criei 6 threads que, na prática, cada uma chama um desses métodos da
> minha classe A, ou seja, criei algo do tipo
>
> public class tA1 extends thread{
> private A a;
>
> public tA1(A a){
> this.a=a;
> }
>
> private void run{
> a.a1();
> }
> }
>
> Isso se repete nas classes tA2, tA3, tA4, tA5, tA6
>
> Minha classe main é algo do tipo
>
> public static void main (String args[]){
> A a1 = new A();
> A a2 = new A();
> A a3 = new A();
> A a4 = new A();
> A a5 = new A();
> A a6 = new A();
>
> Thread tA1 = new tA1(a1);
> Thread tA2 = new tA1(a2);
> Thread tA3 = new tA1(a3);
> Thread tA4 = new tA1(a4);
> Thread tA5 = new tA1(a5);
> Thread tA6 = new tA1(a6);
>
> //Disparar as threads 1, 2 e 3
> tA1.start();
> tA2.start();
> tA3.start();
> }
>
> Agora que vem a minha questão, eu preciso que a main aguarde o fim da
> execução das 3 threads para então disparar as threads 4 e 5, depois
> aguardar
> que as 2 finalizem para disparar a 6.
>
> Eu tentei inicialmente fazer algo do tipo
> tA1.join();
> tA2.join();
> tA3.join();
>
> Só que isso faz com que apos o join da tA1 nada mais seja executado senão a
> própria tA1 e eu quero que tA1, tA2 e tA3 sejam executados em paralelo.
>
> Obrigado
>
> Abs
> Fabiano Netto
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
[As partes desta mensagem que não continham texto foram removidas]
------------------------------------
Para sair da lista, envie email para: java-br-unsubscribe@yahoogroups.com
Para upload/download de arquivos: http://www.yahoogroups.com/files/java-brLinks do Yahoo! Grupos
[As partes desta mensagem que não continham texto foram removidas]
Para upload/download de arquivos: http://www.yahoogroups.com/files/java-br
0 comentários:
Postar um comentário