Desmistificando Threads (DÚVIDA)

:arrow: Observando o Código Abaixo, em sua compiliação a mensagem resulta em:

Waiting for R1 to complete, como eu conseguira o segundo estado de espera para R2 :?:

[code] public class Threads1 {
int x = 0;

    public class Runner implements Runnable {  
        public void run() {  
            synchronized(this){		
        	
            int current = 0;  
            for (int i = 0; i < 4; i++) {  
                current = x;  
                System.out.print(current + ", ");  
               x = current + 2;  
           }  
            notify();
       }  
     }  
  }
    
   public static void main(String[] args) {  
       Threads1 r1 = new Threads1();
       Threads1 r2 = new Threads1();
                 
                 
   synchronized(r1){
	   try{
		   System.out.println("Waiting for R1  to complete");
		  
	   r1.wait();
	   }catch(InterruptedException e){}
	   
  synchronized(r2){
	  try{
		  System.out.println("Waiting for R2  to complete");
	  
	   r2.wait();
  
	   
   }catch(InterruptedException e){}
   System.out.println("Total is"+r1.x);
              
    }
 	     
    }
 }

}
[/code]

Você quer esperar a thread r1, por isso usou wait() certo?

Acontece que o wait não serve para isso. Você deve usar o join() no lugar.

Dá uma lida nesses tópicos:
http://www.guj.com.br/posts/list/57781.java#303957
http://www.guj.com.br/posts/list/53187.java#279817

PS: Não é desmistificando? A palavra vem de “mito”…

[quote=ViniGodoy]Você quer esperar a thread r1, por isso usou wait() certo?

Acontece que o wait não serve para isso. Você deve usar o join() no lugar.

Dá uma lida nesses tópicos:
http://www.guj.com.br/posts/list/57781.java#303957
http://www.guj.com.br/posts/list/53187.java#279817

PS: Não é desmistificando? A palavra vem de “mito”…[/quote]

:wink: sim , vem de mito !!! esta corregido…

Bom a intenção do Thread r1 é o seguinte, eu quero que ele processe em seu tempo e depois passe o estado para Thread seguinte r2, mas o que estou percebendo é que a proxima não pode estar sincronizada somente a primeira, e ai sim a proxima Thread r2 terminaria o seu ciclo de vida.

Join, seria para a Thread de um mesma instância deste Objeto ? O Controle por semáforo já não resolveria isso !!! :wink: