关于volatile

70 阅读1分钟

Volatile 解决的问题:可见性和防重排,最终解决race condition的问题。

网上看了很多关于Volatile的文章,脑海里全是各种概念:可见性,防重排,内存屏障,原子性。。。感觉十分的乱。看了www.geeksforgeeks.org/introductio… 感觉清晰了很多所以写下我的理解。

首先从Volatile要解决什么问题说起,多线程编程最重要的话题当然是处理race condition。我们从经典的存款例子开始,这里我们用了一个简单的boolean去控制两个thread不能同时修改balance变量。

public static class Bank {
   private int balance;
   private boolean lock = false;
   private void deposit() {
      if (!lock) {
         lock = true;
         balance++;
         lock = false;
      }
   }
   
   public static void main() {
      //Thread 1
      Thread.run({
        this.deposit()
      });
      
      //Thread 2
      this.deposit();
   }
}