Java中的多线程状态可见性有没有办法将JVM转换成最坏的情况?
假设我们的代码有2个线程(A和B)有一个引用此类的同一个实例:
public class MyValueHolder { private int value = 1; // ... getter and setter } 当线程A执行myValueHolder.setValue(7)时,不能保证线程B将会读取该值:myValueHolder.getValue()可能 – 理论上可以永远返回1. 然而,实际上硬件会早晚清除第二级缓存,所以线程B会迟早(通常会更早)读取7. 有没有办法使JVM模拟最坏的情况,它永远返回1线程B永远?这将是非常有用的测试我们的多线程代码与我们现有的测试在这种情况下. 解决方法
jcstress维护者在这里.有多种方法来回答这个问题.
>最简单的解决方案是将getter包装在循环中,让JIT提升它.这允许非易失性字段读取,并通过编译器优化来模拟可见性失败. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |