一个简单的java缓存实现
2016-04-02 10:09
609 查看
一个简单的java缓存实现
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;
public final class SimpleCache<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 SimpleCache(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);
}
}
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;
public final class SimpleCache<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 SimpleCache(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);
}
}
相关文章推荐
- 如何设置eclipse的代码补全
- java多线程学习笔记:使用Callable和Future
- java缓存基本原理
- spring常用的工具类
- Java垃圾回收机制
- 【java】向上转型和向下转型
- struts2请求跳转到外部链接
- SpringMvc项目分析
- eclipse如何修改dynamic web module version
- springMVC整合xStream
- springMVC4(5)RestTemplate控制层单元测试
- java基础知识点总结(三)
- Javase之字符串
- 事件处理(Java核心技术卷Ⅰ)
- java虚拟机 jvm 出入java栈 栈空间内存分配
- java虚拟机 jvm 出入java栈 栈空间内存分配
- 20145304 第五周Java学习报告
- 一天一个Java基础——反射
- CoreJava_线程并发(堵塞队列):在某个目录下搜索含有某keyword的文件
- java 继承中构造方法和类成员方法间的关系