码迷,mamicode.com
首页 > 其他好文 > 详细

读写锁之ReadWriteLock

时间:2020-02-24 09:24:56      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:不能   条件变量   lsp   div   互斥锁   读锁   err   变量   str   

你可能有这样一个疑问,Java SDK 并发包里为什么还有很多其他的工具类呢?原因很简单:分场景优化性能,提升易用性

接下来我们聊聊,针对读多写少这种并发场景,Java SDK 并发包提供了读写锁——ReadWriteLock
读写锁,并不是 Java 语言特有的,而是一个广为使用的通用技术,所有的读写锁都遵守以下三条,尤其注意第三条,之后我们讲跟其他锁的对比会用到。
基本原则:
1. 允许多个线程同时读共享变量;
2.只允许一个线程写共享变量;
3. 如果一个写线程正在执行写操作,此时禁止读线程读共享变量(读写锁不能同时存在)
 

互斥锁:

 

 
 

 

 

互斥锁

互斥锁

升降级

ReadWriteLock

读操作允许多个线程同时读共享变量

写操作是互斥的,当一个

线程在写共享变量的时候,是不允许其他线程执行写操作和读操作。

 

不允许升级,允许降级。

读锁不支持条件变量newCondition()

 

 

 
 
读写锁在读多写少场景下性能优于互斥锁的关键
 
总结:
读写锁类似于 ReentrantLock,也支持公平模式和非公平模式。读锁和写锁都实现了
java.util.concurrent.locks.Lock 接口,所以除了支持 lock() 方法外,tryLock()、
lockInterruptibly() 等方法也都是支持的。但是有一点需要注意,那就是只有写锁支持条件变量,
读锁是不支持条件变量的,读锁调用 newCondition() 会抛出 UnsupportedOperationException
异常
 
 
 

读写锁之ReadWriteLock

标签:不能   条件变量   lsp   div   互斥锁   读锁   err   变量   str   

原文地址:https://www.cnblogs.com/amberJava/p/12355474.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!