关于重排序的测试
来源:3-4 线程安全性-可见性
![](http://img1.sycdn.imooc.com/user/5b8cf1480001d1f902000200-100-100.jpg)
weixin_慕数据7074580
2020-11-03
private static boolean ready;
private static int number;
private static class ReadThread extends Thread{
@Override
public void run() {
while(!ready) {
Thread.yield();
}
System.out.println(number);
}
}
public static void main(String[] args) {
new ReadThread().start();
number = 42;
ready = true;
}
上述的大概过程:主线程和读线程都将访问共享变量ready和number。主线程启动读线程,然后将number设为42,并将ready设为true。读线程一直循环直到发现ready的值变为true,然后输出number的值;
问题:number的输出值可能为0,是因为重排序;但是我运行方法好几次,结果都输出42,并没有输出0,我应该如何测试,才能看见重排序产生的效果?
写回答
1回答
-
Jimin
2020-11-04
你好,重排序不是必然的,只是可能做的优化,你这里正常看上下文,是可能发现ready和number有顺序关系的,你可以尝试拆分到不同的类里试一下
00
相似问题