图解源码之java锁的获取和释放(AQS)篇
2018-07-10 13:29
801 查看
以独占式不公平锁为例,通过5个线程争夺ReentrantLock的过程,图解ReentrantLock源码实现,了解显示锁的工作流程。
任何时刻拿到锁的只有一个线程,未拿到锁的线程会打包成节点(node),然后将节点通过CAS自旋的方式,从队列尾部放入同步队列中。
增加尾节点为什么要用cas,因为会存在多个线程竞争尾节点。
以上便是线程竞争锁的过程,以及竞争失败之后需要做的全部事情。
以上便是线程获取和释放锁的全过程,可用如下流程图进行归纳。
另外,以上源码均来自jdk1.8,本文章作为梳理思路,仅摘要了关键部分,详细流程请读者跟着思路自行阅读源码,英文过关是阅读的必要技能之一,不然看不懂注释真的很蛋疼。。重要的事情说三遍,英文一定要好!
英文一定要好!英文一定要好!
相关文章推荐
- 【Java并发编程实战】----- AQS(二):获取锁、释放锁
- jdk1.8 J.U.C并发源码阅读------AQS之共享锁的获取与释放
- 【Java并发编程实战】----- AQS(二):获取锁、释放锁
- 【Java并发编程实战】----- AQS(二):获取锁、释放锁
- 【死磕Java并发】—– J.U.C之AQS:同步状态的获取与释放
- 【Java并发编程实战】-----“J.U.C”:AQS分析(二):获取锁、释放锁
- 【死磕Java并发】—– J.U.C之AQS:同步状态的获取与释放
- JAVA并发编程: AQS获取与释放
- 【死磕Java并发】—– J.U.C之AQS:同步状态的获取与释放
- 【死磕Java并发】—– J.U.C之AQS:同步状态的获取与释放
- 【死磕Java并发】—– J.U.C之AQS:同步状态的获取与释放
- 【死磕Java并发】—– J.U.C之AQS:同步状态的获取与释放
- Java并发编程 AQS分析(二):获取锁、释放锁
- 【死磕Java并发】—– J.U.C之AQS:同步状态的获取与释放
- 【死磕Java并发】—– J.U.C之AQS:同步状态的获取与释放
- 【死磕Java并发】-----J.U.C之AQS:同步状态的获取与释放
- 【死磕Java并发】—– J.U.C之AQS:同步状态的获取与释放
- 【死磕Java并发】—– J.U.C之AQS:同步状态的获取与释放
- AQS源码分析(获取与释放)
- jdk1.8 J.U.C并发源码阅读------AQS之独占锁的获取与释放