Maison  >  Questions et réponses  >  le corps du texte

java - getValue 和 increment 方法是互斥的?

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++;
    }
}

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

黄舟黄舟2743 Il y a quelques jours427

répondre à tous(2)je répondrai

  • 怪我咯

    怪我咯2017-04-18 10:53:06

    Le mot-clé

    volatile est utilisé pour assurer la visibilité de la mémoire.

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:53:06

    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

    .

    répondre
    0
  • Annulerrépondre