ReentrantReadWriteLock 读写锁
来源:互联网 发布:人人商城v2 数据字典 编辑:程序博客网 时间:2024/06/13 12:03
/** * 读写锁ReentrantReadWriteLock * 读写分离可以有效地减少锁的竞争 * 在ReentrantLock中如果给读线程加锁,那么写线程就需要等待 * 给写线程加锁,那么读线程就得等待 * 这显然是不合理的,因为读操作不会对数据的完整性破坏。 * 所以在读的次数远远大于写的次数的时候,使用读写锁子 * @author beiyaoyao */public class ReadWriteLockDemo { private static Lock lock = new ReentrantLock(); private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(); private static Lock readLock = reentrantReadWriteLock.readLock(); private static Lock writeLock = reentrantReadWriteLock.readLock(); private int value; public Object readMission(Lock lock) throws InterruptedException { try { //描述读操作 lock.lock(); Thread.sleep(1000); return value; } finally { lock.unlock(); } } public void writeMission(Lock lock,int num) throws InterruptedException { try { //描述写操作 lock.lock(); Thread.sleep(1000); value = num; System.out.println(value); } finally { lock.unlock(); } } public static void main(String[] args) { final ReadWriteLockDemo readWriteLockDemo = new ReadWriteLockDemo(); //读线程 Runnable readThread = new Runnable() { @Override public void run() { try { //两把锁子交替使用// readWriteLockDemo.readMission(readLock); readWriteLockDemo.readMission(lock); } catch (InterruptedException e) { e.printStackTrace(); } } }; //写线程 Runnable writeThread = new Runnable() { @Override public void run() { try { //两把锁子交替使用// readWriteLockDemo.writeMission(writeLock,new Random().nextInt()); readWriteLockDemo.writeMission(lock,new Random().nextInt()); } catch (InterruptedException e) { e.printStackTrace(); } } }; //夸张的例子 读18次 for(int i = 0 ; i < 18 ; i ++){ new Thread(readThread).start(); } //写2次 for(int i = 0 ; i < 2 ; i ++){ new Thread(writeThread).start(); } }}
如果使用重入锁,那么这段程序的执行时间在20秒左右
如果使用读写锁,那么这段程序的执行时间在2秒左右
0 0
- 读写锁 ReentrantReadWriteLock
- 读写锁ReentrantReadWriteLock
- 读写锁ReentrantReadWriteLock
- 读写锁ReentrantReadWriteLock
- ReentrantReadWriteLock 读写锁 概念
- 读写锁ReentrantReadWriteLock
- 读写锁ReentrantReadWriteLock
- ReentrantReadWriteLock实现读写锁
- 读写锁--ReentrantReadWriteLock
- ReentrantReadWriteLock 读写锁
- 读写锁 ReentrantReadWriteLock
- ReentrantReadWriteLock读写锁
- ReentrantReadWriteLock读写锁
- ReentrantReadWriteLock可重入读写锁
- 读写锁ReentrantReadWriteLock锁降级
- ReentrantReadWriteLock可重入读写锁分析
- ReentrantReadWriteLock读写锁的使用
- ReentrantReadWriteLock读写锁的使用
- 程序设计实践课程记录7
- HDU3364 Lanterns
- Spring事务传播性与隔离级别
- vc闪屏问题处理
- nyoj 308 Substring
- ReentrantReadWriteLock 读写锁
- int、long、longlong、double范围
- vi/vim多行注释和取消注释
- Cas(09)——Cas Proxy原理,通过Cas Proxy访问其它Cas应用
- 封装的简单支付 微信支付宝
- 深入Spring:自定义注解加载和使用
- Vijos 1549题:中位数
- Opencv2.4.9源码分析——HoughLinesP
- DataBinding使用进阶