当前位置: 首页 > news >正文

java 过期缓存,带有过期密钥的Java基于时间的映射/缓存

bd6ddd66df27ffc2d0b940125f2e19ee.png

蓝山帝景

这是我为同一要求所做的示例实现,并发性很好。可能对某人有用。import java.text.SimpleDateFormat;import java.util.Date;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;/** *  * @author Vivekananthan M * * @param  * @param  */public class WeakConcurrentHashMap extends ConcurrentHashMap {    private static final long serialVersionUID = 1L;    private Map timeMap = new ConcurrentHashMap();    private long expiryInMillis = 1000;    private static final SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss:SSS");    public WeakConcurrentHashMap() {        initialize();    }    public WeakConcurrentHashMap(long expiryInMillis) {        this.expiryInMillis = expiryInMillis;        initialize();    }    void initialize() {        new CleanerThread().start();    }    @Override    public V put(K key, V value) {        Date date = new Date();        timeMap.put(key, date.getTime());        System.out.println("Inserting : " + sdf.format(date) + " : " + key + " : " + value);        V returnVal = super.put(key, value);        return returnVal;    }    @Override    public void putAll(Map extends K, ? extends V> m) {        for (K key : m.keySet()) {            put(key, m.get(key));        }    }    @Override    public V putIfAbsent(K key, V value) {        if (!containsKey(key))            return put(key, value);        else            return get(key);    }    class CleanerThread extends Thread {        @Override        public void run() {            System.out.println("Initiating Cleaner Thread..");            while (true) {                cleanMap();                try {                    Thread.sleep(expiryInMillis / 2);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }        private void cleanMap() {            long currentTime = new Date().getTime();            for (K key : timeMap.keySet()) {                if (currentTime > (timeMap.get(key) + expiryInMillis)) {                    V value = remove(key);                    timeMap.remove(key);                    System.out.println("Removing : " + sdf.format(new Date()) + " : " + key + " : " + value);                }            }        }    }}Git Repo Link(使用监听器实现)https://github.com/vivekjustthink/WeakConcurrentHashMap干杯!!

相关文章:

  • php中两个变量都是string_内容也一样但是长度不一样,php基础知识期末考试题无答案...
  • java两个子线程通信,java – 两个线程如何在两个线程运行时进行通信?
  • php7 phpunittest,php - 如何用phpunit运行单一测试方法?
  • zabbix监控php,zabbix监控php状态
  • php语言的form,PHP语言 HTTP请求类,支持GET,POST,Multipart、form-data
  • JAVA定义一个狗看门,为什么我用接口实现狗看门的功能出错?
  • 查看php-fpm配置文件,php-fpm 配置文件检测
  • 用php查ip,php – 有效的ip-位置查询
  • php 怎么取出一个最大值,php max() min() 返回最大值和最小值
  • 公示系统php,企业信用查询公示系统
  • oracle判断单数双数,代码中你所不知道的偶数与奇数的判断方法
  • c 访问oracle视图,Oracle视图
  • Oracle+12c+国家字符集,Oracle 12C CDB字符集修改
  • 确认32位oracle client,32位oracle client
  • 2012安装oracle客户端安装,Windows 2012群集标准版安装Oracle11G