码迷,mamicode.com
首页 > 编程语言 > 详细

图解源码之java锁的获取和释放(AQS)篇

时间:2018-07-10 14:45:51      阅读:765      评论:0      收藏:0      [点我收藏+]

标签:.com   通过   重要   线程   aqs   多个   技能   详细   英文   

以独占式不公平锁为例,通过5个线程争夺ReentrantLock的过程,图解ReentrantLock源码实现,了解显示锁的工作流程。

 

 

技术分享图片技术分享图片

 

任何时刻拿到锁的只有一个线程,未拿到锁的线程会打包成节点(node),然后将节点通过CAS自旋的方式,从队列尾部放入同步队列中。

 技术分享图片

 

技术分享图片

 

增加尾节点为什么要用cas,因为会存在多个线程竞争尾节点。

 技术分享图片技术分享图片

 

 技术分享图片

技术分享图片

以上便是线程竞争锁的过程,以及竞争失败之后需要做的全部事情。

 

技术分享图片

技术分享图片

以上便是线程获取和释放锁的全过程,可用如下流程图进行归纳。

 技术分享图片

 

另外,以上源码均来自jdk1.8,本文章作为梳理思路,仅摘要了关键部分,详细流程请读者跟着思路自行阅读源码,英文过关是阅读的必要技能之一,不然看不懂注释真的很蛋疼。。重要的事情说三遍,英文一定要好!

英文一定要好!英文一定要好!

 

图解源码之java锁的获取和释放(AQS)篇

标签:.com   通过   重要   线程   aqs   多个   技能   详细   英文   

原文地址:https://www.cnblogs.com/dw-haung/p/9274992.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!