多线程 : 读写锁实现缓存系统
2016-03-13 22:48
218 查看
import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class CacheSystem { public static void main(String[] args) { // 测试缓存器 final CacheSystem cache = new CacheSystem(); for (int i = 0; i < 3; i++) { new Thread(new Runnable() { public void run() { while (true) { int num = new Random().nextInt(10); String key = num + ""; Object result = cache.get(key); System.out.println(Thread.currentThread().getName() + "正在查询:" + key); try { Thread.sleep(num * 1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "查询结果为:" + key + "=" + result); } } }).start(); } } // 内部存储器 private Map<String, Object> cache = new HashMap<String, Object>(); private ReadWriteLock rwl = new ReentrantReadWriteLock(); public Object get(String key) { // 上读锁 rwl.readLock().lock(); Object value = cache.get(key); if (value == null) { // 释放读锁,加写锁 rwl.readLock().unlock(); rwl.writeLock().lock(); if (value == null) { value = "value"; cache.put(key, value); } // 还原读锁,释放写锁 rwl.readLock().lock(); rwl.writeLock().unlock(); } // 释放读锁 rwl.readLock().unlock(); return value; } }
相关文章推荐
- Android 中导入百度地图后,activity已经退出了但是service 还是没有停下
- 简单理解通知注册与调用
- Java泛型
- 《Java程序设计》第2周学习总结
- POJ 3398 Perfect Service(树形DP)
- OAuth2.0认证和授权原理
- springmvc集成Ueditor插件实现图片上传2、
- 网络攻防学习心得一(20159320)黑客信息
- Mac 上 Charles 抓取 iso http、https数据包
- C#匿名方法和lambda
- WPF系列(一)依赖项属性
- Python基础--使用字符串
- OS存储器管理(二)
- 6.1 Javascript:事件与回调函数
- DICOM-RT:DICOM3.0标准中关于放疗的基本知识点
- Python基础--使用字符串
- javaWeb工程目录
- Yii 2.0 单文件上传
- 《Java程序设计》第2周学习总结
- 最短路径Dijkstra算法