设置单个任务超时时间轮

This commit is contained in:
wuweifeng10
2021-11-29 13:22:36 +08:00
parent 10a29bec28
commit cfa68089b3
4 changed files with 7 additions and 10 deletions

View File

@@ -24,12 +24,8 @@ public class Async {
* 注意这里是个static也就是只能有一个线程池。用户自定义线程池时也只能定义一个
*/
private static ExecutorService executorService;
/**
* 超时管理时间轮
*/
// private static Timer timer = new Timer();
/**
/*
* 初始化时间轮
*/
static {

View File

@@ -70,6 +70,7 @@ public class WheelMain {
long currentTimeMillis = System.currentTimeMillis();
// System.out.println("当前时间 " + currentTimeMillis);
//遍历槽内所有任务
for (SingleTask singleTask : timerTaskList) {
//如果level = 0代表时间到了或者创建时间+超时时间>当前时间了,也是时间到了
@@ -99,8 +100,8 @@ public class WheelMain {
if (delay <= 0) {
return;
}
//放到第几个槽因为在add进来时任务就已经开始执行了要减去在添加这一霎那的那1毫秒的槽位
int putIndex = INDEX.get() + delay % MAX_SIZE - 1 + 20;
//放到第几个槽
int putIndex = INDEX.get() + delay % MAX_SIZE;
CopyOnWriteArrayList<SingleTask> list = allTaskList.get(putIndex % MAX_SIZE);
//添加到该槽位的队列中
list.add(singleTask);

View File

@@ -16,7 +16,7 @@ public class DeWorker implements IWorker<String, User>, ICallback<String, User>
@Override
public User action(String object, Map<String, WorkerWrapper> allWrappers) {
try {
Thread.sleep(70);
Thread.sleep(15);
} catch (InterruptedException e) {
e.printStackTrace();
}
@@ -25,7 +25,7 @@ public class DeWorker implements IWorker<String, User>, ICallback<String, User>
@Override
public int timeout() {
return 75;
return 19;
}
@Override

View File

@@ -20,7 +20,7 @@ public class Test {
for (int i = 0; i < 10; i++) {
for (int i = 0; i < 100000; i++) {
DeWorker w = new DeWorker();
DeWorker1 w1 = new DeWorker1();
DeWorker2 w2 = new DeWorker2();