xuMengqi's Blog

AbstractQueuedSynchronizer和ReentrantLock是如何实现的?


目录


  1. 1. 背景
  2. 2. AbstractQueuedSynchronizer设计思想
    1. 2.1. 互斥量的维护
    2. 2.2. CLH队列结构
    3. 2.3. CLH控制流程
  3. 3. AbstractQueuedSynchronizer源码解析
    1. 3.1. acquire加锁过程
      1. 3.1.1. 尝试获取互斥量(tryAcquire)
      2. 3.1.2. 线程加入等待队列(addWaiter)
      3. 3.1.3. 重新尝试获取互斥量(acquireQueued)
      4. 3.1.4. 挂起线程(parkAndCheckInterrupt)
    2. 3.2. release释放锁过程
      1. 3.2.1. 尝试释放互斥量(tryRelease)
      2. 3.2.2. 唤醒后继节点(unparkSuccessor)
    3. 3.3. cancelAcquire取消加锁过程
  4. 4. ReentrantLock源码解析
    1. 4.1. 公平锁FairSync的加锁
    2. 4.2. 非公平锁NofairSync的加锁
    3. 4.3. 释放锁