回过头来看,对于volatile的使用场合有些模糊了

来源:13-5 volatile作用

地球是猿的

2021-10-15

图片描述
老师好,很早以前写的笔记有些忘了,图中“对volatile的写入操作优先于读操作”是指写操作在读操作之前的意思吧,应该不是优先级的意思吧

volatile int a = 1;
a = 2;
System.out.println(a);

假设线程1执行到第三行,但还没有读取,线程2执行完第二行,此时发生上下文切换,切换到线程1拿到的a的值为1?

写回答

1回答

悟空

2021-10-16

是这样的,这个“优先于”不是指优先级,指的是happens-before,也就是说,如果volatile的写操作先于读操作发生,那么读操作一定能读到写操作的内容。

在你的例子中,System.out.println(a)包含了对a的读操作,那么不会出现线程1执行到第三行,但还没有读取的情况,因为第二行a=2就是读取

0
1
地球是猿的
理解了,谢谢老师
2021-10-16
共1条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程