简单缓存的实现,相当牛叉!自己看吧,只有50行代码。
2016-03-22 15:25
549 查看
package org.xiu.activity.OrderList.view; import java.util.Map; import java.util.WeakHashMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Author: Relice * @Des: 记录好的代码 * 下面是一个简单缓存的实现,相当牛叉!自己看吧,只有50行代码。 */ public class OptiCache<K, V> { private final Lock lock = new ReentrantLock(); private final int maxCapacity; private final Map<K, V> eden; private final Map<K, V> perm; public OptiCache(int maxCapacity) { this.maxCapacity = maxCapacity; this.eden = new ConcurrentHashMap<K, V>(maxCapacity); this.perm = new WeakHashMap<K, V>(maxCapacity); } public V get(K k) { V v = this.eden.get(k); if (v == null) { lock.lock(); try { v = this.perm.get(k); } finally { lock.unlock(); } if (v != null) { this.eden.put(k, v); } } return v; } public void put(K k, V v) { if (this.eden.size() >= maxCapacity) { lock.lock(); try { this.perm.putAll(this.eden); } finally { lock.unlock(); } this.eden.clear(); } this.eden.put(k, v); } }
相关文章推荐
- MyEclipse开发Java WebService 简单实例
- java 的反射
- php获取文件后缀的9种方法
- 我的感想之结对编程
- S5PV210 sys_clock编程流程 系统时钟功能模块操作
- eclipse+webservice开发实例
- java中的几个易混变量名和内存分配问题
- qt 自定义菜单
- C++中delete 与 delete[]的区别
- java中栈和堆的一些区别
- qt 编写插件 很好的解释了 WorkStation.exe 和trade.dll 之间如何调用
- Java 判断文件夹、文件是否存在、否则创建文件夹
- 正则表达式java
- 关于项目“结对编程”的分析与心得
- Dev-Cpp配置OpenGL图形库(成功版本:Dev-Cpp 5.7.1 MinGW 4.8.1)
- hbase 增删改查 java示例
- phpcms 任意位置获取用户头像
- Spring + Spring MVC +Maven + FreeMarker 配置
- asp.net
- QT QTableView 获取某行的所有信息