为了账号安全,请及时绑定邮箱和手机立即绑定

volitile关键字问题

volitile关键字问题

慕尼黑5688855 2019-03-01 10:35:11
网上看到的例子 /** * @author zhengbinMac */ public class NoVisibility { private static boolean ready; private static int number; private static class ReaderThread extends Thread { @Override public void run() { while(!ready) { Thread.yield(); } System.out.println(number); } } public static void main(String[] args) { new ReaderThread().start(); number = 42; ready = true; } } NoVisibility可能会持续循环下去,因为读线程可能永远都看不到ready的值。甚至NoVisibility可能会输出0,因为读线程可能看到了写入ready的值,但却没有看到之后写入number的值,这种现象被称为“重排序”。 我的问题是:难道static变量也会被缓存到cpu cache中吗?感觉很诡异啊。。。
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

java内存模型并没有规定static变量不能存在cpu cache里啊,还有这种现象不是重排序导致的,是因为ready变量没有强制同步至主内存(可见性)导致的。

查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 505 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信