首页 > 其他 > 详细

为什么JDK代码这样写?final ReentrantLock takeLock = this.takeLock

时间:2019-10-08 18:43:25      阅读:211      评论:0      收藏:0      [点我收藏+]
在CopyOnWriteArrayList的源码中有一个细节值得学习,就是在addIfAbsent方法中ReentrantLock的用法,
先是将一个这个成员变量this.lock重新赋值给一个局部变量lock之后再使用它,貌似跟java的内存模型有关,具体说明参考这篇文章:
https://www.jianshu.com/p/04236d63f055
public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {

    final transient ReentrantLock lock = new ReentrantLock();
    
    private boolean addIfAbsent(E e, Object[] snapshot) {
        // 开发过程中尽量将全局变量重赋给局部变量,尤其用局部变量做循环的情况
        // 会一定程度上提升性能,也应该是代码的一般原则(general principle)。
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            ......
            ......
        } finally {
            lock.unlock();
        }
    }

}

 

为什么JDK代码这样写?final ReentrantLock takeLock = this.takeLock

原文:https://www.cnblogs.com/jun1019/p/11636847.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!