java中的读写锁
来源:互联网 发布:学美容知乎 编辑:程序博客网 时间:2024/04/28 10:29
这里模拟了这样一个场景: 在ReadWriteLockOperator对象里设置一个共享资源 shareResources。
有3个读者(A, B, C)一直连续的从 shareResources 获取信息, 然后输出到控制台;有一个作者每隔60秒往shareResources 加入信息, 加信息的过程相对耗时, 在这段时间, 任何读者都不能访问shareResources。
---------------------------------------混哥线-----------------------------------------------
public class ReadTask extends Thread {
}
-------------------------------------------------------------------------------------
public class WriteTask
}
----------------------------------------------------------------------------------
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
//读写操作的逻辑
public class ReadWriteLockLogic {
}
------------------------------------------------------------------------------------
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService
import java.util.concurrent.TimeUnit;
public class ReadWriteLockTest {
}
----------------------------------------------------------------------------------------
作者A write ===Thread[pool-1-thread-1,5,main]
作者B write ===Thread[pool-1-thread-4,5,main]
读者C read:Thread[pool-1-thread-3,5,main] :hehehhe_0
读者B read:Thread[pool-1-thread-2,5,main] :hehehhe_0
作者A write ===Thread[pool-1-thread-1,5,main]
................
通过观察控制台,可以看到作者a出现后,大约5秒作者b才会出现,而又过了5秒后,读者c和读者b同时会出现,接着5秒后,作者a又出现了。这说明了,读锁之间没有排斥,可以多线程持有并且排斥WriteLock的持有线程。而WriteLock是全部排斥的,是独占的,比较独!
下面是附赠的读写锁的小知识,来至http://www.txdnet.cn/essay/view.jsp?tid=1288670091703&cid=2
(a).重入方面其内部的WriteLock可以获取ReadLock,但是反过来ReadLock想要获得WriteLock则永远都不要想.
(b).WriteLock可以降级为ReadLock,顺序是:先获得WriteLock再获得ReadLock,然后释放WriteLock,这时候线程将保持Readlock的持有.反过来ReadLock想要升级为WriteLock则不可能,为什么?参看(a),呵呵.
(c).ReadLock可以被多个线程持有并且在作用时排斥任何的WriteLock,而WriteLock则是完全的互斥.这一特性最为重要,因为对于高读取频率而相对较低写入的数据结构,使用此类锁同步机制则可以提高并发量.
(d).不管是ReadLock还是WriteLock都支持Interrupt,语义与ReentrantLock一致.
(e).WriteLock支持Condition并且与ReentrantLock语义一致,而ReadLock则不能使用Condition,否则抛出UnsupportedOperationExce
- java中的读写锁
- java中的读写锁
- java中的读写锁入门
- 引用 java中的读写锁实现
- Java中的读写锁模拟实现
- Java中的读写锁Lock&ReadWriteLock
- java 中的读写
- Java中的文件读写
- 关于java中的读写文件
- Java中的锁——ReentrantReadWriteLock(读写锁)
- boost中的读写锁
- Qt中的读写锁
- 多线程中的读写锁
- Qt中的读写锁
- MongoDB中的读写锁
- Java并发包中的读写锁及其实现分析
- Java 并发包中的读写锁及其实现分析
- Java 并发包中的读写锁及其实现分析
- VC从文件中加载图片
- java 多线程火车票售票实例
- 地球坐标系 (WGS-84) 到火星坐标系 (GCJ-02) 的转换算法
- POJ 1088 滑雪
- For RW-50015 error when install EBS
- java中的读写锁
- Java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- android安全机制
- 什么是Restful
- 最好的职业生涯规划的文章(二)
- JAVA 快速实现webService (同步逻辑)
- SQL语句(mysql为模板)
- 第一次程序设计作业
- 第二堂作业