java做一个缓存类(应用TimerTask和ReadWriteLock)

来源:互联网 发布:软件开发甘特图 编辑:程序博客网 时间:2024/06/09 13:52
import java.util.HashMap;import java.util.Map;import java.util.Timer;import java.util.TimerTask;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class MyCache {    private Map<String,Object> map = new HashMap<String, Object>();     private ReadWriteLock rwl = new ReentrantReadWriteLock();     /**     * 往缓存中放数据放一段时间     * @param key     * @param value     * @param mill     */    public void put(final String key,Object value,long mill){        map.put(key, value);        new Timer().schedule(new TimerTask() {            @Override            public void run() {                map.remove(key);            }        }, mill);    }    /**     * 从缓存中拿,如果数据过期,模拟去数据库中取数据     * @param key     * @return     */    public Object get(String key){        Object result = null;        rwl.readLock().lock();        try{            result = map.get(key);            if(result == null){                rwl.readLock().unlock();                rwl.writeLock().lock();                try{                    if(result == null){                        result = new Object();  //如果缓存中没有去数据库取                    }                }finally{                    rwl.writeLock().unlock();                }                rwl.readLock().lock();            }        }finally{            rwl.readLock().unlock();        }        return result;    }}
0 0