使用volatile变量后,符合happens-before规则的是哪个?
public class TestClass {
int i = 0;
volatile boolean tmpvo = false;
public void one() {
i = 1; // 整型变量
tmpvo = true; // 布尔变量
}
public void two() {
if(tmpvo) { // 判断操作
int j = i; // 赋值操作
//......
}
}
}
假设one()方法被线程1执行之后,方法two()被线程2执行,下面哪个符合happens-before的规则?单选
A、整型变量happens-before赋值操作
B、布尔变量happens-before判断操作
C、整型变量happens-before布尔变量
D、判断操作happens-before赋值操作
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
感觉应该选C
我选D,单线程里面的整型变量和布尔变量可能会发生重排序,且对他们没有影响,而volatile是多线程的并发保证,保证了可见性,因而我选择存在逻辑先后的判断与赋值
显然是B啊,这不正是volatile的作用吗
volatile变量的写操作happen-before读操作,选B
摘自:《Java高并发编程详解:多线程与架构设计》 — 汪文君