Bloco sincronizado duplamente

1 resposta
sandeco

Olá pessoal

Estou tentando entender uma o que é sincronização dupla do tipo

public class ClasseB implements Runnable {
	
	
	public void fazAlgoB(){
		synchronized (OutraClasse) {
		        synchronized (this) {	
				System.out.println("Esperando 1 min :" + Thread.currentThread().getName());
				System.out.println("Classe B faz algo por :" + Thread.currentThread().getName());
		}
	}
}

o que exatamente ocorre com a sincronia com OutraClasse…
o bloqueio com THIS já entendi… a essa dupla sincronização… não saquei

Por favor… aceito links, artigos ou explicações

Grato
Sanderson

1 Resposta

T

Na grande maioria das vezes a dupla sincronização (que eu particularmente não aprovo…) é uma gambiarra para não usar locks do tipo read/write… No caso do seu exemplo não tem muito sentido, mas imagine num movimento transacional de saque. Um duplo sincronized faria com que cv sincronizasse ao mesmo tempo leituras e escritas de maneira única, enquanto que com locks de read/write, vc “sincronizaria” somente operações de leitura e /ou escrita de maneira independente, ou seja vc impede dois saques, por exemplo ao mesmo tempo, mas vc não impede que un saque interfira em um saldo…

Criado 16 de novembro de 2009
Ultima resposta 16 de nov. de 2009
Respostas 1
Participantes 2