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++;
}
}
假如一个线程在写,另一个线程在读,不会出现读线程读到的值是写线程还没更新之前的值嘛?也就是读写线程不同步的情况
volatile
キーワードはメモリの可視性を確保するために使用されます。volatile で変更された値は、getValue() を使用して読み取られたときに常に最新の値を取得します。これは可視性を満たします。
volatile は 1 回の読み取りと書き込みの可視性を保証できますが、複合操作 (value++ など) はそれを保証できず、ロックまたはロックが必要です。その他の同期対策