您的位置:首页 > 编程语言 > Java开发

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

2018-07-10 13:29 801 查看

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

 

 

 

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

 

 

 

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

 

 

 

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

 

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

 

 

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

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

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: