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 + -
显示快捷键?