File tree 1 file changed +5
-5
lines changed
1 file changed +5
-5
lines changed Original file line number Diff line number Diff line change @@ -597,25 +597,25 @@ private Node addWaiter(Node mode) {
597
597
598
598
此时,假设线程 ` T1 ` 先获取到锁,线程 ` T2 ` 排队等待获取锁。在线程 ` T2 ` 进入队列之前,需要对 AQS 内部队列进行初始化。` head ` 节点在初始化后状态为 ` 0 ` 。AQS 内部初始化后的队列如下图:
599
599
600
- ![ AQS acquire and release process 5.drawio ] ( https://11laile-note-img.oss-cn-beijing.aliyuncs.com/AQS%20acquire%20and%20release%20process%205.drawio-173461521802737.png )
600
+ ![ AQS- acquire- and- release- process-1 ] ( https://11laile-note-img.oss-cn-beijing.aliyuncs.com/AQS%20acquire%20and%20release%20process%205.drawio-173461521802737.png )
601
601
602
602
此时,线程 ` T2 ` 尝试获取锁。由于线程 ` T1 ` 持有锁,因此线程 ` T2 ` 会进入队列中等待获取锁。同时会将前继节点( ` head ` 节点)的状态由 ` 0 ` 更新为 ` SIGNAL ` ,表示需要对 ` head ` 节点的后继节点进行唤醒。此时,AQS 内部队列如下图所示:
603
603
604
- ![ AQS acquire and release process 4.drawio ] ( https://11laile-note-img.oss-cn-beijing.aliyuncs.com/AQS%20acquire%20and%20release%20process%204.drawio-173461538992839.png )
604
+ ![ AQS- acquire- and- release- process-2 ] ( https://11laile-note-img.oss-cn-beijing.aliyuncs.com/AQS%20acquire%20and%20release%20process%204.drawio-173461538992839.png )
605
605
606
606
此时,线程 ` T3 ` 尝试获取锁。由于线程 ` T1 ` 持有锁,因此线程 ` T3 ` 会进入队列中等待获取锁。同时会将前继节点(线程 ` T2 ` 节点)的状态由 ` 0 ` 更新为 ` SIGNAL ` ,表示线程 ` T2 ` 节点需要对后继节点进行唤醒。此时,AQS 内部队列如下图所示:
607
607
608
- ![ AQS acquire and release process.drawio ] ( https://11laile-note-img.oss-cn-beijing.aliyuncs.com/AQS%20acquire%20and%20release%20process.drawio.png )
608
+ ![ AQS- acquire- and- release- process-3 ] ( https://11laile-note-img.oss-cn-beijing.aliyuncs.com/AQS%20acquire%20and%20release%20process.drawio-173466875782350 .png )
609
609
610
610
此时,假设线程 ` T1 ` 释放锁,会唤醒后继节点 ` T2 ` 。线程 ` T2 ` 被唤醒后获取到锁,并且会从等待队列中退出。
611
611
612
612
这里线程 ` T2 ` 节点退出等待队列并不是直接从队列移除,而是令线程 ` T2 ` 节点成为新的 ` head ` 节点,以此来退出资源获取的等待。此时 AQS 内部队列如下所示:
613
613
614
- ![ AQS acquire and release process 2.drawio ] ( https://11laile-note-img.oss-cn-beijing.aliyuncs.com/AQS%20acquire%20and%20release%20process%202.drawio-173461691867746.png )
614
+ ![ AQS- acquire- and- release- process-4 ] ( https://11laile-note-img.oss-cn-beijing.aliyuncs.com/AQS%20acquire%20and%20release%20process%202.drawio-173461691867746.png )
615
615
616
616
此时,假设线程 ` T2 ` 释放锁,会唤醒后继节点 ` T3 ` 。线程 ` T3 ` 获取到锁之后,同样也退出等待队列,即将线程 ` T3 ` 节点变为 ` head ` 节点来退出资源获取的等待。此时 AQS 内部队列如下所示:
617
617
618
- ![ AQS acquire and release process 3.drawio ] ( https://11laile-note-img.oss-cn-beijing.aliyuncs.com/AQS%20acquire%20and%20release%20process%203.drawio-173461705733148.png )
618
+ ![ AQS- acquire- and- release- process-5 ] ( https://11laile-note-img.oss-cn-beijing.aliyuncs.com/AQS%20acquire%20and%20release%20process%203.drawio-173461705733148.png )
619
619
620
620
## 常见同步工具类
621
621
You can’t perform that action at this time.
0 commit comments