@Slf4j
public class CacheUtil {
private static final ConcurrentHashMap<String, AtomicInteger> CACHE_MAP;
private static final int DEFAULT_CAPACITY = 1024;
public static String CACHE_KEY = "DAY_LEARN_COUNT_";
private static final ScheduledExecutorService SCHEDULER;
private static final ThreadFactory THREAD_FACTORY = new CustomizableThreadFactory("thread-cache-util");
static {
CACHE_MAP = new ConcurrentHashMap<>(DEFAULT_CAPACITY);
int corePoolSize = 5;
SCHEDULER = new ScheduledThreadPoolExecutor(corePoolSize, THREAD_FACTORY);
String format = DateUtil.format(new Date(), "yyyy_MM_dd");
CACHE_KEY = CACHE_KEY + format;
}
public static AtomicInteger getValue() {
return CACHE_MAP.get(CACHE_KEY);
}
public static void putVal(AtomicInteger value, int times) {
CACHE_MAP.put(CACHE_KEY, value);
setScheduled(times);
}
public static void remove() {
log.info("remove:{}", CACHE_KEY);
CACHE_MAP.remove(CACHE_KEY);
}
public static void setScheduled(int times) {
//第二个参数 表示times时间后开始第一次执行
//第三个参数 表示从上一次任务结束times时间后开始执行
SCHEDULER.scheduleAtFixedRate(new ClearTask(),
times, times, TimeUnit.SECONDS);
// 间隔单位毫秒:TimeUnit.MILLISECONDS 间隔单位秒:TimeUnit.SECONDS 间隔单位分钟:TimeUnit.MINUTES 间隔单位小时:TimeUnit.HOURS 间隔单位天:TimeUnit.DAYS
}
static class ClearTask extends TimerTask {
@Override
public void run() {
remove();
}
}
}