reentrantLock


  • 可重入,内部有计数器 ++ — 到 0 释放锁

  • 可以公平也可以非公平锁

  • 悲观锁

  • 可以tryLock(long timeout, TimeUnit unit) 方法,允许线程在指定时间内尝试获取锁,如果超时则返回 false。

  • 中断响应,允许线程在等待锁的过程中响应中断。

获取锁流程

非公平锁:基于CAS获取锁,拿不到就去AQS队列等待。

AQS 队列

AQS 使用一个 双向链表 来管理等待线程,每个节点是一个 Node 对象:

prev:前驱节点。

next:后继节点。

thread:等待的线程。

waitStatus:节点状态(如 SIGNAL、CANCELLED 等)。

当线程获取锁失败时,会被加入队列尾部,并通过 LockSupport.park() 阻塞。当锁释放时,会唤醒队列头部的线程。

upload successful

文章目录
  1. 1. 获取锁流程
  2. 2. AQS 队列
| 本站总访问量次 ,本文总阅读量