源码:java.util.concurrent.locks.ReentrantLock.Sync 源码解析

1. TODO


2. 脑图

  1. Xmind

  2. Edraw

  3. 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] 注意事项

  1. 详见源码:ReentrantLock
    1. obsidian 内部链接:
      1. 源码:java.util.concurrent.locks.ReentrantLock源码解析
    2. Hexo 链接:
      1. http://blog.wangjia.ink/2025/08/31/源码:java.util.concurrent.locks.ReentrantLock源码解析/
  2. 详见源码:AbstractQueuedSynchronizer
    1. obsidian 内部链接:
      1. 源码:java.util.concurrent.locks.AbstractQueuedSynchronizer源码解析
    2. Hexo 链接:
      1. 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);
}

}


源码:java.util.concurrent.locks.ReentrantLock.Sync 源码解析
https://wangjia5289.github.io/2025/09/02/源码:java.util.concurrent.locks.ReentrantLock.Sync源码解析/
Author
咸阳猴🐒
Posted on
September 2, 2025
Licensed under