Java中锁的应用之-ReadWriteLock
2014-01-04 16:10
260 查看
原地址:http://cuisuqiang.iteye.com/blog/1458806
上面我们用儿子和父亲做了一个例子,儿子太猖狂了,花钱根本没有谱。
下面我们再做一个例子,讲解ReadWriteLock的使用,例子和刚才差不多,但是又多了一个角色母亲,而且父母只负责监督,不再存钱。
儿子每三秒都会去花钱一次,而父母每秒都在监督这个卡的使用情况。
所有 ReadWriteLock 实现都必须保证 writeLock 操作的内存同步效果也要保持与相关 readLock 的联系。也就是说,成功获取读锁的线程会看到写入锁之前版本所做的所有更新。
与互斥锁相比,读-写锁允许对共享数据进行更高级别的并发访问。虽然一次只有一个线程(writer 线程)可以修改共享数据,但在许多情况下,任何数量的线程可以同时读取共享数据(reader 线程),读-写锁利用了这一点。从理论上讲,与互斥锁相比,使用读-写锁所允许的并发性增强将带来更大的性能提高。在实践中,只有在多处理器上并且只在访问模式适用于共享数据时,才能完全实现并发性增强。
在 writer 释放写入锁时,reader 和 writer 都处于等待状态,在这时要确定是授予读取锁还是授予写入锁。Writer 优先比较普遍,因为预期写入所需的时间较短并且不那么频繁。Reader 优先不太普遍,因为如果 reader 正如预期的那样频繁和持久,那么它将导致对于写入操作来说较长的时延。公平或者“按次序”实现也是有可能的。
在 reader 处于活动状态而 writer 处于等待状态时,确定是否向请求读取锁的 reader 授予读取锁。Reader 优先会无限期地延迟 writer,而 writer 优先会减少可能的并发。
上面我们用儿子和父亲做了一个例子,儿子太猖狂了,花钱根本没有谱。
下面我们再做一个例子,讲解ReadWriteLock的使用,例子和刚才差不多,但是又多了一个角色母亲,而且父母只负责监督,不再存钱。
儿子每三秒都会去花钱一次,而父母每秒都在监督这个卡的使用情况。
所有 ReadWriteLock 实现都必须保证 writeLock 操作的内存同步效果也要保持与相关 readLock 的联系。也就是说,成功获取读锁的线程会看到写入锁之前版本所做的所有更新。
与互斥锁相比,读-写锁允许对共享数据进行更高级别的并发访问。虽然一次只有一个线程(writer 线程)可以修改共享数据,但在许多情况下,任何数量的线程可以同时读取共享数据(reader 线程),读-写锁利用了这一点。从理论上讲,与互斥锁相比,使用读-写锁所允许的并发性增强将带来更大的性能提高。在实践中,只有在多处理器上并且只在访问模式适用于共享数据时,才能完全实现并发性增强。
在 writer 释放写入锁时,reader 和 writer 都处于等待状态,在这时要确定是授予读取锁还是授予写入锁。Writer 优先比较普遍,因为预期写入所需的时间较短并且不那么频繁。Reader 优先不太普遍,因为如果 reader 正如预期的那样频繁和持久,那么它将导致对于写入操作来说较长的时延。公平或者“按次序”实现也是有可能的。
在 reader 处于活动状态而 writer 处于等待状态时,确定是否向请求读取锁的 reader 授予读取锁。Reader 优先会无限期地延迟 writer,而 writer 优先会减少可能的并发。
相关文章推荐
- Java中锁的应用之-ReadWriteLock
- java做一个缓存类(应用TimerTask和ReadWriteLock)
- JAVA 笔记 ReadWriteLock
- java 锁对象Lock-同步问题更完美的处理方式(ReadWriteLock)
- Java并发21:Lock系列-ReadWriteLock接口和ReentrantReadWriteLock类基本方法学习实例
- java并发包concurrent翻译及源码分析之:ReadWriteLock
- Java多线程学习笔记3——ReentranLock和ReentrantReadWriteLock
- Java中的ReadWriteLock是什么?
- Java中的显示锁 ReentrantLock 和 ReentrantReadWriteLock
- java多线程:并发包中ReentrantReadWriteLock读写锁的锁降级模板 写锁降级为读锁
- Java线程之Read-Write Lock Pattern
- 真实案例:使用Java Thread Dump分析ReadWriteLock导致的死锁问题
- jdk 源码分析(9)java ReentrantReadWriteLock分析
- Java 多线程3:Lock 接口(接口方法分析,ReentrantLock,ReadWriteLock)
- 聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁
- Java基础:多线程之ReadWriteLock、Condition、Semaphore
- 轻松掌握java读写锁(ReentrantReadWriteLock)的实现原理
- 【死磕Java并发】-----J.U.C之读写锁:ReentrantReadWriteLock
- Java中的ReadWriteLock是什么?
- 《深入浅出 Java Concurrency》—锁机制(九) 读写锁 (ReentrantReadWriteLock) (2)