你的位置:首页 > 软件开发 > Java > 附2 volatile

附2 volatile

发布时间:2016-01-12 22:00:24
注:在阅读本章之前,先要了解Java内存模型,见上一章《附1 Java内存模型与共享变量可见性》,链接如下:http://www.cnblogs.com/java-zhao/p/5124725.html1、volatile用法具体的用法可以参照《第二章 ConcurrentHas ...

注:在阅读本章之前,先要了解Java内存模型,见上一章《附1 Java内存模型与共享变量可见性》,链接如下:

http://www.cnblogs.com/java-zhao/p/5124725.html

1、volatile用法

具体的用法可以参照《第二章 ConcurrentHashMap源码解析》中的Segment内部类的count属性,可以看看多线程情况下怎样对其进行操作的,具体链接如下;

http://www.cnblogs.com/java-zhao/p/5113317.html

或者可以参照《第三章 CopyOnWriteArrayList源码解析》中CopyOnWriteArrayList的底层数组,具体链接如下;

http://www.cnblogs.com/java-zhao/p/5121944.html

 

2、具体的实现原理

  • 对volatile变量执行写操作时,会在写操作后加入一条store屏障指令
  • 对volatile变量执行读操作时,会在读操作前加入一条load屏障指令

说人话:

  • 对volatile变量执行读操作时,都要强制的先从主内存读取最新的变量值到工作内存,然后再读工作内存中所存储的变量副本
  • 对volatile变量执行写操作时,又会强制的将工作内存中的刚刚改变的值写到主内存中去

通过上边这样模式,每个线程拿到的volatile变量值都是最新的。

注意:

volatile无法实现原子性:

eg.

private volatile int count = 0;

原标题:附2 volatile

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录