Sé que usar la synchronize
palabra clave antes de un método trae sincronización a ese objeto. Es decir, se sincronizarán 2 subprocesos que ejecutan la misma instancia del objeto.
Sin embargo, dado que la sincronización se realiza a nivel de objeto, no se sincronizarán 2 subprocesos que ejecutan diferentes instancias del objeto. Si tenemos una variable estática en una clase Java a la que llama el método, nos gustaría que se sincronizara en todas las instancias de la clase. Las dos instancias se ejecutan en 2 subprocesos diferentes.
¿Podemos lograr la sincronización de la siguiente manera?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
¿Es cierto que, dado que hemos definido un objeto lock
que es estático y estamos usando la palabra clave synchronized
para ese bloqueo, la variable estática count
ahora está sincronizada en todas las instancias de la clase Test
?