首页 > 其他 > 详细

ReentrantLock锁 源码分析

时间:2019-03-03 21:26:14      阅读:181      评论:0      收藏:0      [点我收藏+]

默认构造函数

技术分享图片

内部类NonfairSync(非公平)

技术分享图片

1.lock()方法

技术分享图片

(AQS)AbstractQueuedSynchronizer.acquire()方法

技术分享图片

tryAcquire 方法

 技术分享图片

nonfairTryAcquire 方法

 技术分享图片

 addWaiter 方法

技术分享图片

enq 方法

技术分享图片

return  t 为当前新增节点的上一个节点,目前没有发现这个返回有什么直接用处,addWaiter 方法就是把当前线程的节点放入AQS队列的尾部

备注:   上述表述的同步队列即为aqs队列

技术分享图片

技术分享图片

技术分享图片

 

 技术分享图片

 

2.unlock()方法

 

 技术分享图片

技术分享图片

技术分享图片

 

 ReentrantLock公平锁其实上述非公平锁类似

             非公平锁在获取锁的时候,会先通过CAS进行抢占,而公平锁则不会,

             判断条件多了hasQueuedPredecessors()方法,也就是加入了同步队列中当前节点是否有前驱节点]的判断,如果该方法返回true,则表示有线程比当前线程更早地请求获取锁,因此需要等待前驱线程获取并释放锁之后才能继续获取锁。

技术分享图片

 

              

ReentrantLock锁 源码分析

原文:https://www.cnblogs.com/dyg0826/p/10467514.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!