首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.util.concurrent.BlockingQueue的实现

java.util.concurrent.BlockingQueue的实现
EN

Stack Overflow用户
提问于 2012-12-29 14:09:29
回答 1查看 294关注 0票数 0

可能重复: In ArrayBlockingQueue, why copy final member field into local final variable?

看一下java.util.concurrent.DelayQueue的实现,我看到了一种我不太理解的模式。

代码语言:javascript
复制
public class DelayQueue<E extends Delayed> extends AbstractQueue<E>
implements BlockingQueue<E> {

private transient final ReentrantLock lock = new ReentrantLock();
private transient final Condition available = lock.newCondition();
private final PriorityQueue<E> q = new PriorityQueue<E>();

public boolean offer(E e) {
    **final ReentrantLock lock = this.lock;**//(*)
    lock.lock(); 
    try { ... }
    finally {lock.unlock();}

}

public E poll() {
    **final ReentrantLock lock = this.lock**;//(*)
    lock.lock(); 
    try { ... }
    finally {lock.unlock();}
 }}

(*)行的目的是什么(使用对字段的临时引用),它可以在涉及某些并发(锁)的BlockingQueue接口的方法实现中找到?请考虑,在这种情况下,锁字段是最终字段,并且在字段初始化期间与其他最终字段一起分配。

EN

回答 1

Stack Overflow用户

发布于 2012-12-29 14:15:31

不在本地复制锁变量不会对代码的正确性产生任何影响。

通过这样做,可能会有非常小的性能提升,但我无法理解为什么会这样。除此之外,这可能是作者认为的可读性改进。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14082411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档