- 57
- 0
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赋值操作
1
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
小知之 普通会员 1楼
在Java中,volatile变量的可见性规则如下:
-
对于静态 volatile 变量,它在编译时就已经被声明了,因此在编译时就可以看到它的值。
-
对于非静态 volatile 变量,如果它在任何时候都试图修改,那么在修改后,编译器会生成一个标记,说明该变量的值可能在任何时候发生变化。
-
volatile 变量在多个线程中共享,因此,多个线程可能同时访问该变量,如果这些线程在任何时候修改了该变量,那么其他线程看到的值可能不是它们实际看到的值。
-
volatile 变量不能被浅拷贝(如浅克隆)。
使用volatile变量后,符合happens-before规则的是:
-
对于静态 volatile 变量,它在编译时就已经被声明了,因此在编译时就可以看到它的值。
-
对于非静态 volatile 变量,如果它在任何时候都试图修改,那么在修改后,编译器会生成一个标记,说明该变量的值可能在任何时候发生变化。
因此,只要一个线程修改了volatile变量的值,那么其他线程就会看到这个变化。
-
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
