JVM是否了解java.util.concurrent包?

JVM是否了解java.util.concurrent包?,jvm,java.util.concurrent,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.newConditi

在下面的
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();
            }
        }
    }
}
private-Deque-Deque=new-LinkedList();
private Lock=new ReentrantLock();
私有条件Condition=lock.newCondition();
类生成器实现了Runnable{
@凌驾
公开募捐{
while(true){
试一试{
lock.lock();
增加(1);
条件.signalAll();
}最后{
lock.unlock();
}
}
}
}

JVM理解并遵守顺序,这样您就无法观察到任何非法行为。它可以(也将)在你看不到的地方走捷径。这通常适用于Java代码,尤其适用于j.u.c类(JVM知道一些东西,可以在保持安全的同时进行进一步优化)。

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