simplecacheimpl.java
来自「JAVA Servlet2.3外文书籍源码」· Java 代码 · 共 94 行
JAVA
94 行
package cache;import java.util.HashMap;import java.util.Iterator;public class SimpleCacheImpl implements ICache { private String name = ""; private int size = 100; private int currentSize = 0; private HashMap objectMap; /** @link aggregation */ /*#ICacheable lnkICacheable;*/ public SimpleCacheImpl() { objectMap = new HashMap(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public ICacheable getCacheable(Object identifier) { synchronized(this) { ICacheable cacheable = (ICacheable)objectMap.get(identifier); if(cacheable != null) cacheable.setLastAccessedTime(System.currentTimeMillis()); return cacheable; } } public void expire() { synchronized(this) { Iterator it = objectMap.keySet().iterator(); while(it.hasNext()) { ICacheable current = (ICacheable)objectMap.get(it.next()); if(current.getExpiryTime() != 0 && current.getExpiryTime() <= System.currentTimeMillis()) { currentSize--; objectMap.remove(current.getIdentifier()); } } } } public void addCacheable(ICacheable cacheable) { synchronized(this) { if(objectMap.containsKey(cacheable.getIdentifier())) return; if(currentSize == size) { Iterator it = objectMap.keySet().iterator(); long time = System.currentTimeMillis(); ICacheable lastAccessed = null; while(it.hasNext()) { ICacheable current = (ICacheable)objectMap.get(it.next()); if(current.getLastAccessedTime() < time) { time = current.getLastAccessedTime(); lastAccessed = current; } } if(lastAccessed != null) { currentSize--; objectMap.remove(lastAccessed.getIdentifier()); } } cacheable.setLastAccessedTime(System.currentTimeMillis()); objectMap.put(cacheable.getIdentifier(), cacheable); currentSize++; } } }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?