您的位置:首页技术文章
文章详情页

使用Java Lock变量之前要进行赋值。为什么?

【字号: 日期:2024-04-26 11:50:50浏览:39作者:猪猪
导读:如何解决使用Java Lock变量之前要进行赋值。为什么??当您在方法中分配给局部变量时,编译器可以进行一些优化。请参见在ArrayBlockingQueue中,为什么将最终成员字段复制到本地最终变量中?解决方法 ...
如何解决使用Java Lock变量之前要进行赋值。为什么??

当您在方法中分配给局部变量时,编译器可以进行一些优化。请参见在ArrayBlockingQueue中,为什么将最终成员字段复制到本地最终变量中?

解决方法

在许多Java源代码中(例如LinkedBlockingDeque),我看到了类似的东西;

final ReentrantLock lock = new ReentrantLock();public void putLast(E e) throws InterruptedException { final ReentrantLock lock = this.lock; lock.lock(); try { // do stuff } finally {lock.unlock(); }}

我了解基本模式(锁定,最终解锁),但是我的问题是, 为什么在使用它之前先对本地作用域的Lock变量进行赋值? 为什么这样做而不是以下内容?

final ReentrantLock lock = new ReentrantLock();public void putLast(E e) throws InterruptedException { this.lock.lock(); try { // do stuff } finally {lock.unlock(); }}

它会影响优化吗?第一个示例可以防止锁变粗吗?

评论后编辑 :如果您真的不知道为什么会出现这种情况,请不要添加答案。这是从Java来源获得的,@author标记是DougLea,所以我很确定它的存在是有原因的。请不要指出该代码是完全等效的。

谢谢

标签: java
相关文章: