使用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,所以我很确定它的存在是有原因的。请不要指出该代码是完全等效的。
谢谢
相关文章:
1. html - 爬虫时出现“DNS lookup failed”,打开网页却没问题,这是什么情况?2. html - css 如何添加这种边框?3. html5 - 表单 表格css怎么写 需要求助4. 前端 - Web内部网页登陆控制,怎么通过apache控制?还有其他的控制吗?5. javascript - 关于this的指向性问题6. javascript - 想一周学会增删查改登录,有入门node.js+express+mongoos的好demo 吗,有thinkphp 经验7. javascript - echart+百度地图8. nginx - 关于vue项目部署到ngnix后出现的问题9. javascript 开发百度地图10. angular.js - 百度爬虫如何处理“#”符号?
