Concurrency 什么';代码的好处是什么
在阅读ArrayBlockingQueue的源代码时,我发现以下代码: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();
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。可能重复这不是最好的参考资料-信息更丰富。