Desmistificando Threads (DÚVIDA)

2 respostas
Marcio_Duran

: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 :?:

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);
                  
        }
     	     
        }
     }
  }

2 Respostas

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”…

Marcio_Duran

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”…

: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:

Criado 30 de maio de 2008
Ultima resposta 31 de mai. de 2008
Respostas 2
Participantes 2