Versão atual:

Dúvida sobre bloco synchronized

Olá pessoal, gostaria de saber se a palavra chave synchronized bloqueia o acesso concorrente apenas ao bloco que o usa ou todos os blocos synchronized do objeto.

Tendo como exemplo a seguinte classe:

class MinhaClasse {  
    private int valor;    

    public MinhaClasse() {  
        valor = 0;
    }  
    public void incrementar() {  
        synchronized(this) {  
            valor++;  
        }  
    }  
    public void decrementar(){  
        synchronized(this) {               
            valor--;  
        } 
    }  
}

Sei que duas threads não poderam executar, ao mesmo tempo, o método "incrementar". Mas poderá uma thread executar "incrementar", ao mesmo tempo, que outra executa "decrementar"? Esse exemplo é seguro em relação às threads ou é preciso fazer uma sincronização complexa?

Versões(2):

Ver a versão formatada

Dúvida sobre bloco synchronized

Comentário

new question