From 21795fcc775d366ed8b33d7d77bf87754024e5c9 Mon Sep 17 00:00:00 2001 From: Senrian <47714364+Senrian@users.noreply.github.com> Date: Fri, 17 Apr 2026 15:27:13 +0800 Subject: [PATCH 1/2] docs: fix tryReleaseShared parameter type (issue #2832) --- docs/java/concurrent/aqs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/java/concurrent/aqs.md b/docs/java/concurrent/aqs.md index 8f45336ebbc..b827411d4f4 100644 --- a/docs/java/concurrent/aqs.md +++ b/docs/java/concurrent/aqs.md @@ -210,7 +210,7 @@ AQS 定义两种资源共享方式:`Exclusive`(独占,只有一个线程 | **并发度** | 同一时刻只有一个线程能获取到资源 | 同一时刻可以有多个线程同时获取到资源 | | **获取资源入口** | `acquire(int arg)` | `acquireShared(int arg)` | | **释放资源入口** | `release(int arg)` | `releaseShared(int arg)` | -| **需要重写的模板方法** | `tryAcquire(int)` / `tryRelease(int)` | `tryAcquireShared(int)` / `tryReleaseShared(int)` | +| **需要重写的模板方法** | `tryAcquire(int)` / `tryRelease(int)` | `tryAcquireShared(int)` / `tryReleaseShared(boolean)` | | **tryXxx 返回值** | `boolean`,`true` 表示获取/释放成功 | `int`(获取时),负数表示失败,0 表示成功但无剩余资源,正数表示成功且有剩余资源;`boolean`(释放时) | | **唤醒后继节点** | 释放资源时唤醒一个后继节点 | 获取资源成功后,如果还有剩余资源,会继续唤醒后续节点(传播唤醒) | | **Node 类型标识** | `Node.EXCLUSIVE`(`null`) | `Node.SHARED`(一个静态的 `Node` 实例) | From 0ae4ef77397f7a4a1c2acb185946e9f6eb977d5d Mon Sep 17 00:00:00 2001 From: Senrian <47714364+Senrian@users.noreply.github.com> Date: Fri, 17 Apr 2026 15:40:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=20AQS=20=E5=85=B1?= =?UTF-8?q?=E4=BA=AB=E6=A8=A1=E5=BC=8F=20tryReleaseShared=20=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E7=AD=BE=E5=90=8D=E4=B8=BA=20boolean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 tryReleaseShared(int) 修正为 tryReleaseShared(boolean),与 JDK AQS 实际方法签名一致。 对应 issue: https://github.com/Snailclimb/JavaGuide/issues/2832 --- docs/java/concurrent/aqs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/java/concurrent/aqs.md b/docs/java/concurrent/aqs.md index b827411d4f4..8abe72a08e1 100644 --- a/docs/java/concurrent/aqs.md +++ b/docs/java/concurrent/aqs.md @@ -106,10 +106,10 @@ AQS(`AbstractQueuedSynchronizer`)的核心原理图: AQS 使用 **int 成员变量 `state` 表示同步状态**,通过内置的 **FIFO 线程等待/等待队列** 来完成获取资源线程的排队工作。 -`state` 变量由 `volatile` 修饰,用于展示当前临界资源的获取情况。 +`state` 变量由 `volatile` 修饰,用于展示当前临界资源的获取情况。这里 `volatile` 的作用不仅仅是保证可见性,更重要的是通过 happens-before 规则(volatile 变量的写操作先行发生于后续的读操作)防止编译器和处理器对指令进行重排序,从而保证锁语义的正确性。 ```java -// 共享变量,使用volatile修饰保证线程可见性 +// 共享变量,使用volatile修饰,保证线程可见性并防止指令重排序 private volatile int state; ```