Last updated on 2025-11-23T20:37:18+08:00
1. TODO
2. 脑图
Xmind
Edraw
Hexo 地址
👉 http://blog.wangjia.ink/2025/09/02/源码:java.util.concurrent.locks.ReentrantLock.Sync源码解析/
3. 基础部分
3.1. ReentrantLock.Sync 概述
Sync 是一个抽象类,是 java.util.concurrent.locks.ReentrantLock 的静态内部类,继承了 java.util.concurrent.locks.AbstractQueuedSynchronizer

[!NOTE] 注意事项
- 详见源码:
ReentrantLock
obsidian 内部链接:
- 源码:java.util.concurrent.locks.ReentrantLock源码解析
Hexo 链接:
- http://blog.wangjia.ink/2025/08/31/源码:java.util.concurrent.locks.ReentrantLock源码解析/
- 详见源码:
AbstractQueuedSynchronizer
obsidian 内部链接:
- 源码:java.util.concurrent.locks.AbstractQueuedSynchronizer源码解析
Hexo 链接:
- http://blog.wangjia.ink/2025/09/01/源码:java.util.concurrent.locks.AbstractQueuedSynchronizer源码解析/
4. 源码部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| abstract static class Sync extends AbstractQueuedSynchronizer { @ReservedStackAccess final boolean tryLock() { Thread current = Thread.currentThread(); int c = getState(); if (c == 0) { if (compareAndSetState(0, 1)) { setExclusiveOwnerThread(current); return true; } } else if (getExclusiveOwnerThread() == current) { if (++c < 0) throw new Error("Maximum lock count exceeded"); setState(c); return true; } return false; } abstract boolean initialTryLock(); @ReservedStackAccess final void lock() { if (!initialTryLock()) acquire(1); } @ReservedStackAccess final void lockInterruptibly() throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); if (!initialTryLock()) acquireInterruptibly(1); } @ReservedStackAccess final boolean tryLockNanos(long nanos) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); return initialTryLock() || tryAcquireNanos(1, nanos); } @ReservedStackAccess protected final boolean tryRelease(int releases) { int c = getState() - releases; if (getExclusiveOwnerThread() != Thread.currentThread()) throw new IllegalMonitorStateException(); boolean free = (c == 0); if (free) setExclusiveOwnerThread(null); setState(c); return free; } protected final boolean isHeldExclusively() { return getExclusiveOwnerThread() == Thread.currentThread(); } final ConditionObject newCondition() { return new ConditionObject(); } final Thread getOwner() { return getState() == 0 ? null : getExclusiveOwnerThread(); } final int getHoldCount() { return isHeldExclusively() ? getState() : 0; } final boolean isLocked() { return getState() != 0; } private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { s.defaultReadObject(); setState(0); } }
|