Java · Essencial · Inglês · Técnico
synchronized
Palavra-chave que garante exclusão mútua: só uma thread por vez executa o bloco ou método sobre o mesmo monitor, e as mudanças ficam visíveis às demais.
Onde usar
Aparece em contadores e caches compartilhados; sem ela, count++ em várias threads perde atualizações. Em review: 'isso é thread-safe?'.
Em código
class Contador {
private int n;
synchronized void inc() { n++; }
synchronized int get() { return n; }
}Exemplos
Make the increment synchronized or two threads will lose updates.
Torne o incremento synchronized ou duas threads perderão atualizações.
Keep the synchronized block as small as possible.
Mantenha o bloco synchronized o menor possível.
Cuidado
Sincronizar em this ou em objeto público expõe o lock a código externo; prefira um lock privado. Bloco grande também derruba o desempenho.