volatile关键字

1.volatile是什么?

  volatile是java虚拟机提供的轻量级的同步机制,具有如下特性:

  a.保证可见性

  b.不保证原子性

  c.禁止指令重排

2.JMM内存模型?

  JMM——https://www.cnblogs.com/zhouxuezheng/p/14950302.html

3.volatile的可见性代码验证:

  主线程中判断资源类Cache中的变量a的值是否为0,如果为0则一直死循环。新开的线程A会在2秒钟后去改变Cache中a的值,但是主线程不能及时获取到a的最新值从而一直死循环,程序并不会在2秒钟结束。即线程A中对Cache中a的修改对main线程而言不可见 。如果在变量a上添加volatile关键字,程序就可在2秒后就可正常退出。注意:如果在while代码块中有System.out.println();程序也会在2秒后正常退出,这是因为System.out.println()方法底层有synchronized关键字,这会导致main线程强制获取主存中的数据。

class Cache{
    int a = 0;
    public void setA() {
        a = 2;
    }
}
public class VolatileDemo {
    public static void main(String[] args) {
        Cache cache = new Cache();
        new Thread(() -> {
            try { Thread.sleep(2000); } catch (InterruptedException e) {}
            cache.setA();
        }, "线程A").start();
        while (cache.a == 0) {

        }
    }
}

 

  

volatile关键字

上一篇:Educational Codeforces Round 73 (Rated for Div. 2)


下一篇:Docker(41)- Portainer 可视化面板安装