java多线程---读写锁的应用
2017-06-01 14:04
190 查看
1.概述:为了提高性能,Java提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。
2.构建一个缓存示例:
3.注意: 在同一线程中,持有读锁后,不能直接调用写锁的lock方法 ,否则会造成死锁。
2.构建一个缓存示例:
public class CacheReadWriteLock { private Map<String, Object> map = new HashMap<String, Object>(); private ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); public static void main(String[] args) { CacheReadWriteLock cacheReadWriteLock = new CacheReadWriteLock(); for (int i = 0; i < 3; i++) { new Thread(new Runnable() { @Override public void run() { System.out.println(cacheReadWriteLock.getData("my")); } }).start(); } } public Object getData(String key) { readWriteLock.readLock().lock(); Object value = null; try { value = map.get(key); if (value == null) { readWriteLock.readLock().unlock(); readWriteLock.writeLock().lock(); try { if ((value = map.get(key)) == null) { value = "aaaa";// 查询db或耗时操作 map.put(key, value); System.out.println("readWriteLocking"); } } finally { readWriteLock.writeLock().unlock(); readWriteLock.readLock().lock(); } } } finally { readWriteLock.readLock().unlock(); } return value; } }
3.注意: 在同一线程中,持有读锁后,不能直接调用写锁的lock方法 ,否则会造成死锁。
相关文章推荐
- android 下载文件,file的读写应用
- C语言多线程的应用--局域网中多台计算机对同一文件读写
- Android 4.4 KitKat限制第三方应用的SD卡读写权限,怎么解决?
- 基于S3C2440的Linux-3.6.6移植——SD卡的应用(二),SD卡的读写
- Android 上层应用读写设备节点
- android文件读写以及不同应用之间的文件读写操作
- 3.2 应用层与内核的通信方法 :访问数据的I/O方式、读写驱动程序、发送I/O控制码、内存共享
- VC中海量文件读写类设计与应用(转)
- 高频RFID(13.56M)读写模块的设计与应用实例 (上)
- Android使用contentprovide实现对其他应用数据库的读写
- java多线程:并发包中ReentrantReadWriteLock读写锁的锁降级模板
- CIH病毒原理的应用——物理内存的读写
- 为什么 Android 4.4 KitKat 限制第三方应用的 SD 卡读写权限?
- 应用dom4j读写xml范例
- Java多线程 应用场景
- 【Android应用开发技术:文件读写】Android文件系统
- 下一个目标,PAGEFILE.SYS被频繁大量读写,导致系统响应,CPU应用超高
- 读写其他应用的SharedPreferences
- C#读写操作app.config中的数据应用介绍
- JAVA多线程读写文件操作