package org.sxkj.common.utils;
|
|
import java.util.Map;
|
import java.util.Optional;
|
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
/**
|
* 统一间隔执行任务
|
*/
|
public class NumHashMapRecordUtils {
|
/**
|
* 间隔次数map
|
*/
|
private static Map<String, AtomicInteger> INTERVAL_NUM_MAP = new ConcurrentHashMap();
|
|
|
/**
|
* 根据次数执行
|
*
|
* @param id 唯一值
|
* @param intervalNum 间隔执行次数
|
* @param supplier 执行方法
|
*/
|
public static void applyByNum(String id, Integer intervalNum, Runnable supplier) {
|
AtomicInteger atomicInteger = Optional.ofNullable(INTERVAL_NUM_MAP.get(id)).orElse(new AtomicInteger(0));
|
|
if (atomicInteger.get() % intervalNum == 0) {
|
supplier.run();
|
}
|
atomicInteger.incrementAndGet();
|
INTERVAL_NUM_MAP.put(id, atomicInteger);
|
}
|
|
|
}
|