可重入锁的几个核心要素对标AQS

在JUC包中AbstractQueuedSynchronizer经常被称作队列同步器(AQS),是JUC包内锁的实现关键,那要实现一个可重入锁需要几个核心要素

  1. 需要一个记录锁状态的变量state,state至少需要两个值0、1,对state操作要保证安全性,需要使用到CAS(自旋)
  2. 需要有一个变量保存当前是那个线程持有锁
  3. 需要一个列表存储当前等待锁的线程的列表
  4. 需要有一个可以唤醒和阻塞线程的操作

那对标AQS

  • 记录锁的状态

  • 保存当前是那个线程持有的锁,在AQS父类AbstractOwnableSynchronizer中

  • 存储当前等待的线程列表

  • 唤醒和堵塞线程的操作

使用的是LockSupport工具类中的lock、pack方法