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; }