¿En qué se diferencian los métodos sincronizados de instancia y los métodos sincronizados estáticos en Java?
sobes.tech AI
Respuesta de la IA
En Java, los métodos sincronizados son de dos tipos: métodos sincronizados de instancia y métodos sincronizados estáticos. La principal diferencia radica en sobre qué objeto se realiza el bloqueo:
-
Método sincronizado de instancia (
synchronizedsinstatic): El bloqueo ocurre en el objeto (this) al que pertenece el método. Esto significa que si tienes varias instancias de la clase, cada una tiene su propio bloqueo. -
Método sincronizado estático (
static synchronized): El bloqueo ocurre en el objeto de la clase —Classque representa la propia clase. Por lo tanto, el bloqueo es común para todas las instancias de la clase.
Ejemplo:
public class Example {
public synchronized void instanceMethod() {
// bloquea this
}
public static synchronized void staticMethod() {
// bloquea Example.class
}
}
Esto significa que dos hilos no pueden ejecutar simultáneamente el mismo método sincronizado de instancia de un objeto, pero pueden ejecutar métodos sincronizados diferentes de distintos objetos de esa clase.
Al mismo tiempo, el método sincronizado estático bloquea toda la clase, por lo que en un momento dado solo un hilo puede ejecutar cualquier método sincronizado estático de esa clase, independientemente de las instancias.