Java并发编程 | ReentrantReadWriteLock读写锁的使用——实现AB互斥、AC互斥、BC不互斥

本文介绍了Java的ReentrantReadWriteLock读写锁,对比了它与ReentrantLock的区别,阐述了读写锁的公平性、重入性和锁降级特性,并详细说明如何利用读写锁实现AB互斥、AC互斥、BC不互斥,探讨了公平锁与非公平锁的选择及其性能影响。
摘要由CSDN通过智能技术生成

1、什么是读写锁ReentrantReadWriter

说到ReentrantReadWriteLock,首先要做的是与ReentrantLock划清界限。它和后者都是单独的实现,彼此之间没有继承或实现的关系。

ReentrantLock 实现了标准的互斥操作,属于排他锁,也就是一次只能有一个线程持有锁,也即所谓独占锁的概念。显然这个特点在一定程度上面减低了吞吐量,实际上独占锁是一种保守的锁策略,在这种情况下任何“读/读”,“写/读”,“写/写”操作都不能同时发生。但是同样需要强调的一个概念是,锁是有一定的开销的,当并发比较大的时候,锁的开销就比较客观了。所以如果可能的话就尽量少用锁,非要用锁的话就尝试看能否改造为读写锁。

ReadWriteLock 描述的是:一个资源能够被多个读线程访问,或者被一个写线程访问,但是不能同时存在读写线程。也就是说读写锁使用的场合是一个共享资源被大量读取操作,而只有少量的写操作(修改数据)。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。

2、读写锁ReentrantReadWriter特性

公平性选择:支持非公平(默认)和公平的锁获取模式,吞吐量还是非公平优于公平
重入性:该锁支持重入锁,以读写线程为例:读线程在获取读锁之后,能够再次读取读锁,而写线程在获取写锁之后可以同时再次获取读锁和写锁
锁降级:遵循获取写锁,获取读锁再释放写锁的次序,写锁能够降级为读锁</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值