关于重排序的测试

来源:3-4 线程安全性-可见性

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有顺序关系的,你可以尝试拆分到不同的类里试一下

0
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程