Java中的多线程状态可见性:有没有办法将JVM变成最坏的情况?
2022-09-04 06:06:37
假设我们的代码有 2 个线程(A 和 B)在某个地方引用了此类的同一实例:
public class MyValueHolder {
private int value = 1;
// ... getter and setter
}
当线程 A 这样做时,不能保证线程 B 会读取该值:理论上可以永远返回。myValueHolder.setValue(7)
myValueHolder.getValue()
1
然而,在实践中,硬件迟早会清除第二级缓存,因此线程B迟早会读取(通常更早)。7
有没有办法让JVM模拟最坏的情况,在这种情况下,它一直为线程B永远返回1
?在这种情况下,这对于使用现有测试测试我们的多线程代码非常有用。