1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

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?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags java threads ou faça a sua própria pergunta.