码迷,mamicode.com
首页 > 其他好文 > 详细

aqs实现

时间:2019-12-06 19:15:37      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:park   解锁   使用   重入   roc   image   非公平锁   现在   ESS   

aqs实现

基于以下技术栈:

1、自旋

2、park,unpark

3、cas

有什么特点:

1、如果是单个线程的话,或者线程交替执行,那么使用的jvm来实现的,并没有动用到os层

 

加锁过程:

1、判断当前状态,如果锁现在的状态为0(自由状态),公平锁可能需要判断是否需要排队(hasQueueProcessor),如果没有,将当前状态使用cas修改,然后加锁成功,如果非公平锁,直接使用cas操作更新状态,如果失败,加入到队列中,线程进来后首先判断当前持有锁的是不是自己,如果是自己,那么重入数+1,然后进入同步块执行(交替执行,完全没有进入到队列中,没有进入那个park,unpark方法)

可重入是怎么实现的:

如果当前状态为不自由(!=0),判断当前线程是不是owner,如果是owner,那么将state+1,代表重入次数增加1

 

加锁解锁的基本流程

 

 

技术图片

 

 

aqs实现

标签:park   解锁   使用   重入   roc   image   非公平锁   现在   ESS   

原文地址:https://www.cnblogs.com/zhangchiblog/p/11996872.html

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