ReentrantLock知识大盘点

定义

重入锁就是支持重新进入的锁,表示该锁能够支持一个线程对资源的重新加锁。

实现重进入

ReenTrantLock为了实现重进入,必须要解决两个问题:
(1) 线程再次获取锁;
(2) 锁的最终释放。
ReentrantLock是通过组合自定义同步器来实现锁的获取和释放,
处理逻辑:
通过判断当前线程是否为获取锁的线程来决定获取操作是否成功,如果是获取锁的线程再次请求,则将同步状态值进行增加并返回true,表示获取同步状态成功。
成功获取锁的线程再次获取锁,只是增加了同步状态值,这也就要求ReentrantLock在释放同步状态时减少同步状态值。当同步状态为0时,将占有线程设置为null,并返回true,表示释放成功。

公平锁和非公平锁

ReentrantLock支持设置公平锁或者使用非公平锁。首先,公平性与否是针对获取锁而言的,如果一个锁是公平的,那么锁的获取顺序应该符合请求的绝对时间顺序(FIFO)。
ReentrantLock同步锁的实现逻辑:
在线程等待队列中加入当前节点是否有前驱节点的判断,如果存在前驱节点,则等待前驱节点获取锁并释放锁之后才能继续获取锁。
非公平锁的实现逻辑:
只要CAS设置同步状态成功,则表示当前线程获取了锁。
公平性锁保证了锁的获取按照FIFO原则,而代价是进行大量的线程切换。非公平性锁虽然可能会造成线程“饥饿”,但极少的线程切换,保证了其更大的吞吐量。(饥饿原因:当一个线程请求锁时,只要获取了同步状

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值