From da1fb999e43785c0722f2974ebb9ee5a0c16cdf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?11=E6=9D=A5=E4=BA=86?= Date: Sun, 22 Dec 2024 14:29:12 +0800 Subject: [PATCH] =?UTF-8?q?[docs=20update]AQS=E9=9D=A2=E8=AF=95=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/concurrent/java-concurrent-questions-03.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/java/concurrent/java-concurrent-questions-03.md b/docs/java/concurrent/java-concurrent-questions-03.md index 7d6ec884..7a199241 100644 --- a/docs/java/concurrent/java-concurrent-questions-03.md +++ b/docs/java/concurrent/java-concurrent-questions-03.md @@ -899,11 +899,16 @@ CompletableFuture.runAsync(() -> { ### AQS 是什么? -AQS (`AbstractQueuedSynchronizer` ,抽象队列同步器)是从 JDK1.5 开始提供的 Java 并发核心组件,很多同步器都是基于 AQS 实现的,如 `ReentrantLock` 、 `Semaphore` 、 `CountDownLatch` 等等。 +AQS (`AbstractQueuedSynchronizer` ,抽象队列同步器)是从 JDK1.5 开始提供的 Java 并发核心组件。AQS 是一个抽象类,对外提供了模板方法,很多同步器都是基于 AQS 实现的,如 `ReentrantLock` 、 `ReentrantReadWriteLock` 、 `Semaphore` 、 `CountDownLatch` 等等。 -在并发场景下,多个线程需要控制对共享资源的同步访问。即线程先尝试获取资源,如果获取资源失败(资源已经被其他线程占有),就进入队列中阻塞,等待被唤醒。当占有资源的线程释放资源之后,就会去队列中唤醒后续线程节点,允许等待中的线程尝试获取资源。 +```JAVA +public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable { +} +``` -在整个获取资源的过程中,需要协调多个线程的资源获取和等待操作,AQS 正是实现这一机制的工具。 +在并发场景下,多个线程需要控制对共享资源的同步访问。即线程先尝试获取资源,如果获取资源失败(资源已经被其他线程占有),就进入队列中阻塞,等待被唤醒。当占有资源的线程释放资源之后,会去队列中唤醒后续线程节点,允许等待中的线程尝试获取资源。 + +在多个线程获取共享资源的过程中,需要一种机制协调多个线程的资源获取和等待操作, **AQS 正是实现这一机制的工具。** ### ⭐️AQS 的原理是什么?