美文网首页
Java内存模型-2

Java内存模型-2

作者: 昵称与隐藏 | 来源:发表于2019-03-03 17:44 被阅读0次

来认识下volatile这个关键字。当一个变量被声明为volatile变量后,对于这个变量的读写操作会比较特别。其实volatile关键字对于域的单个读写相当于一个锁对这个变量的读写做了同步。但是对于一个变量的多个操作就不同了。

锁的happens-before原则保证锁的释放和获取之间的内存可见性,所以对于一个volatile变量的读,总能看到任意线程对于这个变量的写。锁的语义决定了临界区代码的执行具有原子性,这意味着即使是64位的long和double型变量,只要它是volatile变量,对于变量的读写就将具有原子性。如果是过个volatile操作或者volatile++这用复合操作。这些操作整体上不具有原子性。

简而言之, volatile变量具有以下特性:

1. 可见性:对于volatile变量的读总能看到任意线程对于它的写

2. 原子性:volatile对于单个变量的读写操作具有原子性,但是对于多个volatile操作或者复合操作不具有原子性

volatile的内存语义:

1. 当读一个volatile变量时,JMM会把该线程对应的本地内存中的置位无效,线程接下来将从主存中读取变量值

相关文章

网友评论

      本文标题:Java内存模型-2

      本文链接:https://www.haomeiwen.com/subject/rzhmuqtx.html