volatile具有原子性吗??_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > volatile具有原子性吗??

volatile具有原子性吗??

 2018/11/2 12:27:41  andyou2012  程序员俱乐部  我要评论(0)
  • 摘要:不卖关子,答案是具有原子性,但是在某些情况下也没有原子性。1.具有准确的说volatile是具有可见性的,其核心原理是当对volatile标记的变量进行修改时,会将其他缓存的线程中的的变量值清除。当其他缓存中的线程读取此变量值时,会首先向主线程中缓存获取到消息,将新值传给当前线程并赋值。每次变量更新volatile变量时都会重复此步骤。所以,从这种意义上来说,入门书籍《Java编程思想》告诉我们。,定义long或double变量时,如果使用volatile关键字,就会获得(简单的赋值与返回操作
  • 标签:
不卖关子,答案是具有原子性,但是在某些情况下也没有原子性。

1.具有
  准确的说volatile 是具有可见性的,其核心原理是当对volatile标记的变量进行修改时,会将其他缓存的线程中的的变量值清除。当其他缓存中的线程读取此变量值时,会首先向主线程中缓存获取到消息,将新值传给当前线程并赋值。每次变量更新volatile变量时都会重复此步骤。
   所以,从这种意义上来说,入门书籍《Java编程思想》告诉我们。,定义long或double变量时,如果使用volatile关键字,就会获得(简单的赋值与返回操作)原子性。


2.不具有
  但是volatile有个条件,用在getAndOperator场合是不具备原子性的。比如在做n =n+1,n++这种。因为在执行此类操作时有三个步骤:获取,自增,赋值。其jvm指令中,有内存屏障的介入,内存屏障会将已经发生写入的值同步到各个线程内存中。
   因此在此种情况下不具备原子性。
上一篇: 简单快速实现单例HttpUtil举例 下一篇: 没有下一篇了!
  • 相关文章
发表评论
用户名: 匿名