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 (
synchronizedsemstatic): 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 objetoClassque 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.