首页 > 其他 > 详细

ReentrantReadWriteLock可重入读写锁的源码解析

时间:2019-09-19 17:03:48      阅读:130      评论:0      收藏:0      [点我收藏+]

ReentrantReadWriteLock 源码解析,一个个方法的慢慢来。写上自己的注释,欢迎指正。

1.尝试获取写锁。第555行。

       final boolean tryWriteLock() {
 //获取当前线程
            Thread current = Thread.currentThread();
//获取当前状态state锁标志变量
            int c = getState();
            if (c != 0) {
  //获取写锁的次数。返回count中表示的独占保留的数量  
                int w = exclusiveCount(c);
//写锁次数w为0,说明当前有读锁占用。
//当前线程不是获得写锁的线程。
                if (w == 0 || current != getExclusiveOwnerThread())
                    return false;
//写锁次数达到最大次数
                if (w == MAX_COUNT)
                    throw new Error("Maximum lock count exceeded");
            }
//CAS修改当前锁标志
            if (!compareAndSetState(c, c + 1))
                return false;
//设置当前线程,为得到写锁的线程。
            setExclusiveOwnerThread(current);
            return true;
        }        

 

ReentrantReadWriteLock可重入读写锁的源码解析

原文:https://www.cnblogs.com/itbac/p/11550710.html

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