ReentrantLock.Sync::tryRelease源码阅读

// 尝试释放锁
protected final boolean tryRelease(int releases) {
     // c:释放锁后的新state
     int c = getState() - releases;
     if (getExclusiveOwnerThread() != Thread.currentThread())
          throw new IllegalMonitorStateException();
     // free:当前锁是否已经空闲,如果是则说明当前锁的所有重入都已解锁
     boolean free = (c == 0);
     if (free)
          setExclusiveOwnerThread(null);
     // 因为锁为独占式获取,所以设置state值不需要同步措施
     setState(c);
     return free;
}

 

posted @ 2021-05-06 14:25  榆木脑袋0v0  阅读(61)  评论(0)    收藏  举报