![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
#volatile
ouyu2014
这个作者很懒,什么都没留下…
展开
-
volatile禁止指令重排
多线程环境中线程交替执行,由于编译器优化重排的存在,无法保证两个线程之间使用变量的一致性 首先编译器执行指令的时候会存在指令重排的情况,以便于提高指令的执行速度。就像是考试一样,肯定是先把会的题做完再做难的题目。什么时候会发生重排,也就是两个指令之间不会存在依赖性,例如: a = 1; y = a+1。这两个语句就不会发生指令重排,因为y的值依赖a的值;但是如果是: a =1 ; y = 2 。这两个语句就会发生,因为不存在依赖。 在单线程的条件下,指令重排不会影响到最终的结果,也就是数据的一致性可以得到保原创 2021-02-21 15:09:09 · 289 阅读 · 0 评论 -
volatile的不保证原子性
package now; import java.util.concurrent.TimeUnit; class Student{ volatile int age = 0; //此时的age加了volatile关键字修饰,volatile不保证原子性 public void addPlusPlus() { this.age++; } } /** * 验证volatile的不保证原子性 * 原子性的意思是不可分割,完整性,也就是某个线程在执行某个具原创 2021-02-21 13:52:46 · 109 阅读 · 0 评论 -
volatile的可见性(代码实现)
volatile的可见性(代码实现) package now; import java.sql.Time; import java.util.concurrent.TimeUnit; class Student{ int age = 0; //volatitle int age = 0; public void changeage(){ this.age = 50; } } /** * 验证volatile的可见性 * 假如 int age = 0原创 2021-02-21 11:47:54 · 296 阅读 · 1 评论