Java中的大部分同步类Lock,Semaphore,ReentrantLock等都是基于AQS(AbstractQueueSynchronizer)实现的。ReentrantLock意思为可重入锁,指的是一个线程能够对一个临界资源重复加锁。将ReentrantLock与常用的Synchronized进行比较:
ReentrantLock | Synchronized | |
锁实现机制 | 依赖AQS | 监视器模式 |
灵活性 | 支持响应中断,超时,尝试获取锁 | 不灵活 |
释放形式 | 必须显式的调用unlock()释放锁 | 自动释放监视器 |
锁类型 | 公平锁、非公平锁 | 非公平锁 |
条件队列 | 可关联多个条件队列 | 关联一个条件队列 |
可重入性 | 可重入 | 可重入 |
参考博客:
https://tech.meituan.com/2019/12/05/aqs-theory-and-apply.html