【发布时间】:2019-02-01 14:35:14
【问题描述】:
另一天,我在阅读 Doug Lea 的 ArrayBlockingQueue 实现代码,注意到很多方法 (public, default, and private) 有以下引用:
final Object[] items = this.items;
final ReentrantLock lock = this.lock;
我已经四处询问了一个合理的解释,但到目前为止还没有令人满意的答案。我不太清楚为什么我们首先需要有这样的局部变量?以这种方式编码有什么好处?
也许我错过了并发编程中的一些重要点。你能帮忙解释一下吗?
【问题讨论】:
-
欢迎来到 Stack Overflow!请使用tour(您将获得徽章!),环顾四周,并通读help center,尤其是How do I ask a good question? 我还推荐Jon Skeet 的Writing the Perfect Question 它会帮助人们帮助你a很多如果您向我们展示了您所询问的示例。
-
对于我们这些不熟悉Doug Lee的人,您能否给出他的示例代码的链接,或者在此处粘贴他的一些示例代码。
-
@tgolisch 我用一个指向具有引用类代码的 OpenJDK 镜像的链接编辑了问题。
-
@tgolisch 对不起。我拼错了他的名字:Doug Lea,他是标准 Java 库的主要作者,特别是多线程和并发包的作者。我提到的类是Java5包“java.util.concurrent”上的核心java类之一。感谢 Jiri 添加源代码链接。
-
我的猜测是这些变量是易失性的,将它们存储在局部变量中意味着您只需执行一次易失性读取,而不是每次使用该变量时。我认为这就是 John Bollinger 以更详细的技术方式解释的内容。
标签: java