ReentrantLock与synchronized的区别

ReentrantLock是Java中的一种可重入锁,实现了Lock接口,提供了公平与非公平的锁获取策略。它包含Sync、NonfairSync和FairSync三个内部类,NonfairSync用于非公平锁,FairSync则保证公平。锁的获取和释放需通过tryLock()和unlock()方法显式操作,支持线程抢占。构造函数允许指定是否使用公平策略。
摘要由CSDN通过智能技术生成
ReentrantLocksynchronized
锁实现机制AQS监视器Monitor
获取锁可以通过tryLock()尝试获取锁,更灵活线程抢占模型
释放锁必须显示通过unlock()释放锁自动释放
锁类型支持公平锁和非公平锁非公平锁
可重入性可重入可重入

ReentrantLock内部结构

ReentrantLock实现了Lock接口,Lock接口中定义了lock(),unlock(),tryLock()等相关操作。

public class ReentrantLock implements Lock,java.lang.Serializable

ReentrantLock总共有三个内部类:Sync、NonfairSync、FairSync。

NonfairSync 类继承了 Sync类,表示采用非公平策略获取锁:每一次都尝试获取锁,不会按照公平等待的原则进行等待,不会让等待时间最久的线程获得锁。

FairSync类也继承了 Sync类,表示采用公平策略获取锁:当资源空闲时,它总是会先判断 sync队列是否有等待时间更长的线程,如果存在,则将当前线程加入到等待队列的尾部,实现了公平获取原则。

ReentrantLock构造函数:默认是采用的非公平策略获取锁

public ReentrantLock() {
	//默认非公平策略
	sync = new NonfairSync();
}

ReentrantLock(boolean) 构造函数:可以传递参数确定采用公平策略或者是非公平策略,参数为 true表示公平策略,否则,采用非公平策略。

public ReentrantLock(boolean fair) {
	//默认非公平策略
	sync = fair ?new FairSyne() : new NonfairSync();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值