Sobes.tech
Junior — Middle

Qual é a diferença entre métodos sincronizados de instância e métodos sincronizados estáticos em Java?

sobes.tech IA

Resposta da IA

Em Java, existem dois tipos de métodos sincronizados: métodos sincronizados de instância e métodos sincronizados estáticos. A principal diferença está no objeto sobre o qual ocorre o bloqueio:

  • Método sincronizado de instância (synchronized sem static): O bloqueio ocorre no objeto (this) ao qual o método pertence. Isso significa que, se você tiver várias instâncias da classe, cada uma terá seu próprio bloqueio.

  • Método sincronizado estático (static synchronized): O bloqueio ocorre no objeto da classe — o objeto Class que representa a própria classe. Assim, o bloqueio é comum a todas as instâncias da classe.

Exemplo:

public class Example {
    public synchronized void instanceMethod() {
        // bloqueia this
    }

    public static synchronized void staticMethod() {
        // bloqueia Example.class
    }
}

Isso significa que dois threads não podem executar simultaneamente o mesmo método sincronizado de instância de um objeto, mas podem executar métodos sincronizados diferentes de objetos diferentes dessa classe.

Ao mesmo tempo, o método sincronizado estático bloqueia toda a classe, portanto, em um momento, apenas um thread pode executar qualquer método sincronizado estático dessa classe, independentemente das instâncias.