利用readwritelock简单模拟实现多线程下cache的系统
2024-08-27 02:14:06
package cn.lyy.hibernate.many2one; import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock; public class MultiCacheDemo { private Map<String, Object> cache = new HashMap<String,Object>();
public static void main(String args[]){ } private ReadWriteLock rwl = new ReentrantReadWriteLock();
public Object getData(String key){
rwl.readLock().lock();
Object value = null;
try{
value = cache.get(key);
if(value == null){
rwl.readLock().unlock();
rwl.writeLock().lock();
try{
//因为如果同时又多个线程在读数据的话,可能会同时发现value
//为空,所以应该再在这里加一个if语句判断value是否为空
if(value == null){ value = "aaaa"; //实际是去queryDB(); }
}finally{
rwl.writeLock().unlock();
}
rwl.readLock().lock();
}
}finally{
rwl.readLock().unlock();
}
return value;
}
}
最新文章
- 51Nod 1010 只包含因子2 3 5的数 Label:None
- leetcode刷题全纪录(持续更新)
- BizTalk开发系列(六) BizTalk开发简述
- javascript 封装(给自己看)
- 20145211 《Java程序设计》第1周学习总结——小荷才露尖尖角
- django中嵌入百度editor插件
- 锁_rac环境kill锁表会话后出现killed状态(解决)
- codevs 1049 棋盘染色
- HashSet和LinkedHashSet特点.
- Leetcode OJ : Evaluate Reverse Polish Notation Stack C++ solution
- iOS设计模式解析(二)抽象工厂方法
- poj 2411 Mondriaan&#39;s Dream 轮廓线dp
- 如何使用C API来操作UCI
- Android 开发笔记___EditText__文本编辑框
- Zabbix实战-简易教程--通过公众平台企业号发送短信
- 对Linux0.11 中 进程0 和 进程1分析
- CF Manthan, Codefest 16 B. A Trivial Problem
- Unity --- 在原目录中,将选中的Texture剥离为rgb和alpha
- Postman 安装及使用入门教程 (谷歌浏览器插件版)
- MVC5笔记