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;
        }        
02-01 04:30