假设我们的代码有两个线程(A和B)在某处引用了该类的同一个实例:
public class MyValueHolder {
private int value = 1;
// ... getter and setter
}
当线程A执行myValueHolder.setValue(7)
时,并不能保证线程B会读取到这个值:myValueHolder.getValue()
可能会永远返回1
,这只是理论上的可能性。
但实际上,硬件迟早会清除第二级缓存,因此线程B迟早(通常更快)会读取到7
。
是否有办法让JVM模拟这种最坏情况,即对于线程B永远返回1
的情况?这将非常有用,可以在这种情况下使用我们现有的测试来测试多线程代码。