ReadWriteLock
来源:互联网 发布:电脑音乐制作软件 编辑:程序博客网 时间:2024/05/21 07:04
读写锁的好处是读写分离了,如果一个程序大量的操作都是读的话会比重入锁快很多
- 读-读:不互斥,不阻塞
- 读-写:互斥,读时不能写,写不能读
- 写-写:互斥 -
如果这段代码使用重入锁可能需要20秒
public class ReadWriteLockDemo { private static ReentrantLock lock=new ReentrantLock();//重入锁 private static ReentrantReadWriteLock readWriteLock=new ReentrantReadWriteLock();//读写锁 //通过readWriteLock创建ReadLock private static ReadLock readLock=readWriteLock.readLock(); //通过readWriteLock创建writeLock private static WriteLock writeLock=readWriteLock.writeLock(); private int value; //每读一次需要一秒 public int read(Lock lock) throws InterruptedException{ try { lock.lock(); Thread.sleep(1000); return value; } finally { lock.unlock(); } } public void write(Lock lock,int i) throws InterruptedException{ try { lock.lock(); Thread.sleep(1000); System.out.println("writing"); value=i; } finally { lock.unlock(); } } public static void main(String[] args) throws InterruptedException { final ReadWriteLockDemo rwd = new ReadWriteLockDemo(); Runnable read = new Runnable() { @Override public void run() { try { System.out.println(rwd.read(readLock));// System.out.println(rwd.read(lock)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; Runnable write = new Runnable() { @Override public void run() { try {// rwd.write(lock, new Random().nextInt(100)); rwd.write(writeLock, new Random().nextInt(10)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; for (int i = 0; i < 18; i++) { new Thread(read).start(); if(i==5){ new Thread(write).start(); } } }}
0 0
- ReadWriteLock
- ReadWriteLock
- ReadWriteLock
- ReadWriteLock
- ReadWriteLock
- ReadWriteLock
- 浅谈ReadWriteLock
- ReadWriteLock用法
- ReadWriteLock用法
- ReadWriteLock用法
- ReadWriteLock用法
- ReadWriteLock使用
- ReadWriteLock用法
- ReadWriteLock用法
- ReadWriteLock是什么?
- 可重入锁 -- ReadWriteLock
- 线程ReadWriteLock 读写锁
- JDK5 读写锁 ReadWriteLock
- 自定义进度条(水平,圆形)
- 韩信点兵
- MySQL 复制介绍及搭建
- dedecms中输出顶级栏目的方法
- Atitit 路径规划法attilax总结 扫描线路法
- ReadWriteLock
- 猴子吃桃
- 谷哥的小弟学后台(25)——Filter(2)
- Linux学习4 Linux下的分区
- hashcode和equals方法的联系
- QQ用户分组状态栏功能实现
- 《机器学习实战》读书笔记6:朴素贝叶斯源码
- Spring框架的理解
- SPOJ STC02 Antisymmetry——马拉车啊马拉车