JVM是否了解java.util.concurrent包的任何内容?

时间:2013-06-22 13:21:00

标签: jvm java.util.concurrent

try块下面,必须按顺序执行3个语句。陈述是否有可能无序运行? JVM是否在j.u.c类中向前看以查看同步指示符(synchronized,volatile)并确定它不能重新排序执行?

private Deque<Integer> deque = new LinkedList<Integer>();
private Lock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
class Producer implements Runnable {
    @Override
    public void run() {
        while (true) {
            try {
                lock.lock();
                deque.add(1);
                condition.signalAll();
            } finally {
                lock.unlock();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

JVM理解并遵守订购,以便您无法观察到任何非法行为。它可以(并将会)在您无法观察到的区域中采取捷径。这通常适用于Java代码,特别是j.u.c类(其中JVM知道其可以进一步优化的同时保持安全。)

答案 1 :(得分:1)

JVM永远不会重新排序函数调用,除非它完全内联它们。任何副作用都可以隐藏在它们后面,所以除非它能证明不是这样,否则它不能重新排序。