public class CheesyCounter {
// Employs the cheap read-write lock trick
// All mutative operations MUST be done with the 'this' lock held
@GuardedBy("this") private volatile int value;
public int getValue() { return value; }
public synchronized int increment() {
return value++;
}
}
假如一个线程在写,另一个线程在读,不会出现读线程读到的值是写线程还没更新之前的值嘛?也就是读写线程不同步的情况
Le mot-clé
volatile
est utilisé pour assurer la visibilité de la mémoire.Lorsque la valeur modifiée par volatile est lue à l'aide de getValue(), la dernière valeur sera toujours obtenue, ce qui répond à la visibilité
.Volatile peut garantir la visibilité d'une lecture et d'une écriture, mais d'opérations composées (telles que value++). ) ne peut pas le garantir et doit être ajouté des verrous ou d'autres mesures de synchronisation