博客原地址:blog.csdn.net/weixin_3931…
unlock()方法源码
源码步骤:
- 调用tryRelease方法进行去操作state变量。每次-1。如果减为0了标识锁被释放
- 如果锁被释放就去调用unparkSuccessor方法去唤醒下一个未被取消的线程,并且顺带的剔除掉已取消的线程。
同时在整个加锁和释放锁的过程中有很多 waitStatus和线程中断逻辑。下篇详解。
原图地址:wangtingblog.oss-cn-beijing.aliyuncs.com/img/解锁.draw…
推荐打开软件:www.draw.io