1、用于线程任务调度,当同一个任务时遵循队列形式执行,根据不同业务场景
自定等待任务waitForNextTick(),调起业务逻辑notifyExpired()
任务执行完成进入线程等待run()
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
public class TimingWheel {
//控制任务周期 TimeUnit控制时间单位
private final long tickDuration;
//任务队列
private Queue> wheel ;
//调取业务逻辑
private final CopyOnWriteArrayList> expirationListeners = new CopyOnWriteArrayList>();
//控制任务唯一性
private final Map> indicator = new ConcurrentHashMap<>();
//标识线程是否中断
private final AtomicBoolean shutdown = new AtomicBoolean(false);
//执行任务线程
private Thread workerThread;
// ~ -------------------------------------------------------------------------------------------------------------
/**
* 初始化定时
* @param tickDuration
* @param timeUnit
*/
public TimingWheel(int tickDuration, TimeUnit timeUnit,int room) {
if (timeUnit == null) {
throw new NullPointerException("unit");
}
if (tickDuration <= 0) {
<