So che l'uso della synchronize
parola chiave prima di un metodo porta la sincronizzazione a quell'oggetto. Ovvero, verranno sincronizzati 2 thread che eseguono la stessa istanza dell'oggetto.
Tuttavia, poiché la sincronizzazione è a livello di oggetto, 2 thread che eseguono istanze diverse dell'oggetto non verranno sincronizzati. Se abbiamo una variabile statica in una classe Java chiamata dal metodo, vorremmo che fosse sincronizzata tra le istanze della classe. Le due istanze vengono eseguite in 2 thread diversi.
Possiamo ottenere la sincronizzazione nel modo seguente?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
È vero che poiché abbiamo definito un oggetto lock
statico e stiamo usando la parola chiave synchronized
per quel blocco, la variabile statica count
è ora sincronizzata tra le istanze di classe Test
?