gpt4 book ai didi

java - java.util.concurrent.BlockingQueue 的实现

转载 作者:行者123 更新时间:2023-12-01 14:58:06 26 4
gpt4 key购买 nike

Possible Duplicate:
In ArrayBlockingQueue, why copy final member field into local final variable?

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

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 接口(interface)的方法实现中找到?考虑一下,在锁定字段是最终字段并在字段初始化期间与其他最终字段一起分配的情况。

最佳答案

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

这样做可能会带来非常小的性能提升,但我无法理解为什么会这样。除此之外,作者可能认为这可以提高可读性。

关于java - java.util.concurrent.BlockingQueue 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14082411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com