经常会有需要使用map进行缓存一些数据,并且希望缓存一定时间后自动过期移除该元素;有时候还希望移除元素的时候进行回调通知,以便执行相应的业务逻辑。
本文提供一种扩展Map功能的实现方法,供大家参考借鉴。实现的核心逻辑是添加key的时候同时记录时间,实例化该扩展Map的时候同时启动一个线程,以200毫秒的周期扫描Map的添加记录有效时间。比较添加时间和当前时间,过期的remove掉,同时调用回调方法。
代码实现如下:
package com.xinhui.supermap;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
/**
* Map的扩展:支持key过期,以及触发回调事件
*
* @author ChenChaogui
* @Date 2024年5月18日 下午2:52:06
*
* @param <K>
* @param <V>
*/
public abstract class BaseExpireMap<K, V> {
ConcurrentHashMap<K, V> dataMap = null;
//控制过期时间
ConcurrentHashMap<K, Long> expireMap = null;
/**
*
* @param key
* @param val
* @param expireTime 过期时间 秒数
* @return
*/
public V put(K key, V val, long expireTime) {
l