java - getValue 和 increment 方法是互斥的?
黄舟
黄舟 2017-04-18 10:51:06
0
2
460
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++;
    }
}

假如一个线程在写,另一个线程在读,不会出现读线程读到的值是写线程还没更新之前的值嘛?也就是读写线程不同步的情况

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(2)
刘奇

volatileキーワードはメモリの可視性を確保するために使用されます。

いいねを押す +0
巴扎黑

volatile で変更された値は、getValue() を使用して読み取られたときに常に最新の値を取得します。これは可視性を満たします。
volatile は 1 回の読み取りと書き込みの可視性を保証できますが、複合操作 (value++ など) はそれを保証できず、ロックまたはロックが必要です。その他の同期対策

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!