標籤:
之前只是聽說過緩衝池,也沒有具體的接觸到,今天做項目忽然想到了用緩衝池,就花了一上午的時間研究了下緩衝池的原理,並實現了基本的緩衝池功能。
/** * 緩衝池 * @author xiaoquan * @create 2015年3月13日 上午10:32:13 * @see */public class CachePool { private static CachePool instance;//緩衝池唯一執行個體 private Map<String,Object> cacheItems;//緩衝Map private CachePool(){ cacheItems = new HashMap<String,Object>(); } /** * 得到唯一執行個體 * @return */ public synchronized static CachePool getInstance(){ if(instance == null){ instance = new CachePool(); } return instance; } /** * 清除所有Item緩衝 */ public synchronized void clearAllItems(){ cacheItems.clear(); } /** * 擷取緩衝實體 * @param name * @return */ public synchronized Object getCacheItem(String name){ if(!cacheItems.containsKey(name)){ return null; } CacheItem cacheItem = (CacheItem) cacheItems.get(name); if(cacheItem.isExpired()){ return null; } return cacheItem.getEntity(); } /** * 存放緩衝資訊 * @param name * @param obj * @param expires */ public synchronized void putCacheItem(String name,Object obj,long expires){ if(!cacheItems.containsKey(name)){ cacheItems.put(name, new CacheItem(obj, expires)); } CacheItem cacheItem = (CacheItem) cacheItems.get(name); cacheItem.setCreateTime(new Date()); cacheItem.setEntity(obj); cacheItem.setExpireTime(expires); } public synchronized void putCacheItem(String name,Object obj){ putCacheItem(name,obj,-1); } /** * 移除快取資料 * @param name */ public synchronized void removeCacheItem(String name){ if(!cacheItems.containsKey(name)){ return; } cacheItems.remove(name); } /** * 擷取快取資料的數量 * @return */ public int getSize(){ return cacheItems.size(); }}
public class CacheItem {private Date createTime = new Date();//建立緩衝的時間private long expireTime = 1;//緩衝期滿的時間private Object entity;//緩衝的實體public CacheItem(Object obj,long expires){this.entity = obj;this.expireTime = expires;}public boolean isExpired(){return (expireTime != -1 && new Date().getTime()-createTime.getTime() > expireTime);} /** * 省略getter、setter方法 */ }
Java 緩衝池(使用Map實現)