AQS中可重入锁ReentrantLock源码一释放锁过程

96 阅读1分钟

博客原地址:blog.csdn.net/weixin_3931…

unlock()方法源码

源码步骤:

  • 调用tryRelease方法进行去操作state变量。每次-1。如果减为0了标识锁被释放
  • 如果锁被释放就去调用unparkSuccessor方法去唤醒下一个未被取消的线程,并且顺带的剔除掉已取消的线程。

同时在整个加锁和释放锁的过程中有很多 waitStatus和线程中断逻辑。下篇详解。

原图地址:wangtingblog.oss-cn-beijing.aliyuncs.com/img/解锁.draw…

推荐打开软件:www.draw.io