zoukankan      html  css  js  c++  java
  • 为什么JDK代码这样写?final ReentrantLock takeLock = this.takeLock

    在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();
            }
        }
    
    }
  • 相关阅读:
    PHP session
    PHP范例注册审核
    php文件操作
    JSON 弹窗
    PDO
    CSP-S2020 游记
    Meissel-Lehmer算法 学习笔记
    [AGC046C] Shift 题解
    Min_25筛学习笔记
    GDOI2020 游记
  • 原文地址:https://www.cnblogs.com/jun1019/p/11636847.html
Copyright © 2011-2022 走看看