Dúvidas em sincronização

1 resposta
TheJayyBe

Sobre o seguinte código:

[code=java]
public class Consumidor2 {

public static void main(String[] args) {
	Produtor2 p = new Produtor2();		
	p.start();	
            synchronized(p){	
		try{
			System.out.println("Aguardando o produtor produzir!");
			p.wait();
			System.out.println("Agora já posso consumir!!!");
		}
		catch(InterruptedException e){				
		}
	}	
	}	

}
class Produtor2 extends Thread{	

public void run(){

int total = 0;

synchronized(this){

for(int i=0;i<100;i++){				

total+=i;

}

notify();

}

}

}

Eu gostaria de saber o propósito do wait§ na primeira classe. Se eu sincronizo a instância ‘p’ porque preciso sincronizar o objeto (bloco) na segunda classe com o “synchronized(this){}”? Além disso, pelo código, há possibilidade do notify() na segunda classe ocorrer antes do p.wait() já que se trata se uma thread também sendo executada?

Obrigado.

1 Resposta

A

Olá amigo

Bem o wait() serve pra por a thread para dormir e ao mesmo tempo liberar o objeto bloqueado fazendo com que outras declarações possam usá-lo.

Justamente porque eles estão acessando o mesmo objeto no caso o p , na verdade é o total que eles estão querendo sincronizar.

Sim é possível só que seu código poderá travar pois a primeira thread irá dormir eternamente. Já que liberamos o objeto bloqueado , mas a thread continua dormindo .

Altere no final o seu programa:

//depois do catch :
System.out.println(p.total);

// coloque o int total antes do método run() :

int total = 0 ;

e veja o que ocorre.

qq dúvida só postar.

Criado 2 de março de 2014
Ultima resposta 3 de mar. de 2014
Respostas 1
Participantes 2