/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.core.cachepool.container;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.jinhe.tss.core.cachepool.Cacheable;
import com.jinhe.tss.core.cachepool.CacheableKey;
/**
* <p> MapContainer.java </p>
*
* 为了MapContainer能适用多线程,其每步对 map 的操作都必须锁定 map。
* map本身不支持同步,ehcache则没有这个问题。
*
* @author Jon.King 2006-12-31
*/
public class MapContainer extends AbstractPoolContainer {
private Map<CacheableKey, Cacheable> map;
public MapContainer(String name) {
super(name);
map = Collections.synchronizedMap(new HashMap<CacheableKey, Cacheable>());
}
public Cacheable get(Object key) {
Cacheable o = null;
synchronized(map){
o = (Cacheable) map.get(key);
}
return o;
}
public Cacheable put(Object key, Cacheable value) {
synchronized(map){
map.put((CacheableKey) key, value);
}
return value;
}
public Cacheable remove(Object key) {
Cacheable o = null;
synchronized(map){
o = (Cacheable) map.remove(key);
}
return o;
}
public List<CacheableKey> getKeys() {
List<CacheableKey> keys;
synchronized(map){
keys = new ArrayList<CacheableKey>(map.keySet());
}
return keys;
}
public void clear() {
synchronized(map){
map.clear();
}
}
public int size() {
int size = 0;
synchronized(map){
size = map.size();
}
return size;
}
public List<Cacheable> getValues() {
List<Cacheable> values;
synchronized(map){
values = new ArrayList<Cacheable>(map.values());
}
return values;
}
}