欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ReentrantLock锁 源码分析

程序员文章站 2022-06-19 21:45:40
默认构造函数 内部类NonfairSync(非公平) 1.lock()方法 (AQS)AbstractQueuedSynchronizer.acquire()方法 tryAcquire 方法 nonfairTryAcquire 方法 addWaiter 方法 enq 方法 return t 为当前新 ......

默认构造函数

ReentrantLock锁 源码分析

内部类nonfairsync(非公平)

ReentrantLock锁 源码分析

1.lock()方法

ReentrantLock锁 源码分析

(aqs)abstractqueuedsynchronizer.acquire()方法

ReentrantLock锁 源码分析

tryacquire 方法

 ReentrantLock锁 源码分析

nonfairtryacquire 方法

 ReentrantLock锁 源码分析

 addwaiter 方法

ReentrantLock锁 源码分析

enq 方法

ReentrantLock锁 源码分析

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

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

ReentrantLock锁 源码分析

ReentrantLock锁 源码分析

ReentrantLock锁 源码分析

 

 ReentrantLock锁 源码分析

 

2.unlock()方法

 

 ReentrantLock锁 源码分析

ReentrantLock锁 源码分析

ReentrantLock锁 源码分析

 

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

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

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

ReentrantLock锁 源码分析