0

try块下面,必须按该顺序执行 3 条语句。语句是否有可能出现乱序?JVM 是否在 juc 类中向前看以查看同步指标(同步的、易失的)并确定它不能重新排序执行?

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();
            }
        }
    }
}
4

2 回答 2

1

JVM 理解并服从命令,这样你就无法观察到任何非法的东西。它可以(并且将)在您无法观察到的区域中走捷径。这通常适用于 Java 代码,尤其适用于 juc 类(JVM 知道一些东西,因此它可以在保持安全的同时进一步优化。)。

于 2013-06-24T13:25:02.977 回答
1

JVM 永远不会重新排序函数调用,除非它已经完全内联了它们。任何副作用都可以隐藏在它们背后,因此除非它可以证明事实并非如此,否则它不能重新排序它们。

于 2013-06-24T13:28:11.793 回答