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 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); } }