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

浙公网安备 33010602011771号