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();
}
}