前段时间写的ConnectionPool已经可用运行了,现在转向CachePool,偶还是菜鸟所以只是利用了j2se的api简单的实现了一个对象缓存器,顺便希望大家能够说说缓存器的设计思路(暂时不考虑分布式应用)。谢谢大家了!
[b]这是缓存器核心类。[/b]
[code]
package cc.vicp.eden.cache;
import java.util.*;
public class CachePool {
private HashMap<Object, Object> pool;
private LinkedList list;
private int capacity;
public CachePool(int size) {
pool = new HashMap<Object, Object>();
list = new LinkedList<Object>();
this.capacity = size;
}
public synchronized Object get(Object key) {
Object value = pool.get(key);
if(value != null) {
list.remove(key);
list.addFirst(key);
}
return value;
}
public synchronized void put(Object key, Object value) {
Object obj = null;
if(pool.size() >= capacity) {
obj = list.removeLast();
pool.remove(obj);
}
obj = pool.get(key);
if(! value.equals(obj)) {
pool.remove(key);
}
pool.put(key, value);
list.remove(key);
list.addFirst(key);
}
public synchronized Object remove(Object key) {
Object value = pool.get(key);
list.remove(key);
return value;
}
public synchronized void clear() {
pool.clear();
list.clear();
}
}
[/code]
[b]这是缓存器核心类。[/b]
[code]
package cc.vicp.eden.cache;
import java.util.*;
public class CachePool {
private HashMap<Object, Object> pool;
private LinkedList list;
private int capacity;
public CachePool(int size) {
pool = new HashMap<Object, Object>();
list = new LinkedList<Object>();
this.capacity = size;
}
public synchronized Object get(Object key) {
Object value = pool.get(key);
if(value != null) {
list.remove(key);
list.addFirst(key);
}
return value;
}
public synchronized void put(Object key, Object value) {
Object obj = null;
if(pool.size() >= capacity) {
obj = list.removeLast();
pool.remove(obj);
}
obj = pool.get(key);
if(! value.equals(obj)) {
pool.remove(key);
}
pool.put(key, value);
list.remove(key);
list.addFirst(key);
}
public synchronized Object remove(Object key) {
Object value = pool.get(key);
list.remove(key);
return value;
}
public synchronized void clear() {
pool.clear();
list.clear();
}
}
[/code]