Concurrency 什么';代码的好处是什么

Concurrency 什么';代码的好处是什么,concurrency,locking,java,Concurrency,Locking,Java,在阅读ArrayBlockingQueue的源代码时,我发现以下代码: public E take() throws InterruptedException { final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { try { while (count == 0) notEmpty.await();

在阅读ArrayBlockingQueue的源代码时,我发现以下代码:

public E take() throws InterruptedException {
    final ReentrantLock lock = this.lock;
    lock.lockInterruptibly();
    try {
        try {
            while (count == 0)
                notEmpty.await();
        } catch (InterruptedException ie) {
            notEmpty.signal(); // propagate to non-interrupted thread
            throw ie;
        }
        E x = extract();
        return x;
    } finally {
        lock.unlock();
    }
}
为什么不使用代码呢

public E take() throws InterruptedException {
     lock.lockInterruptibly();
    try {
        try {
            while (count == 0)
                notEmpty.await();
        } catch (InterruptedException ie) {
            notEmpty.signal(); // propagate to non-interrupted thread
            throw ie;
        }
        E x = extract();
        return x;
    } finally {
        lock.unlock();
    }
}

行代码的好处是:final ReentrantLock lock=this.lock

Doug Lea推广了这个想法——我认为最初的想法是,当使用最终的局部变量时,JVM可能会执行一些与性能相关的优化

请查看OpenJDK线程中讨论这个问题的线程

编辑:

一项小小的研究在stack上提出了两个相关的问题:


@assylias。可能重复这不是最好的参考资料-信息更丰富。