使用ScheduledExecutorService和一个实现了Runnable接口的类来生成了一个定时任务,比如该任务5分钟后执行。现在想要延迟这个定时任务的执行,比如5分钟后不想这个定时任务执行了,想要再推迟3分钟执行,请问具体应该如何实现?
2 回答

largeQ
TA贡献2039条经验 获得超8个赞
ScheduledExecutorService在使用schedule提交定时任务时会返回一个ScheduledFuture<?>,可以调用它的cancel方法。
代码如下。
import org.junit.Test;
import java.util.concurrent.*;
/**
* Created by fanxian
* datetime on 2017/11/11 16:41.
*/
public class ScheduledExecutorServiceTest {
@Test
public void t1() throws InterruptedException {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);
System.out.println("创建5秒延迟的任务");
ScheduledFuture<?> schedule = scheduledExecutorService.schedule(new Runnable() {
@Override
public void run() {
doTask("5s");
}
}, 5, TimeUnit.SECONDS);
Thread.sleep(4900);
schedule.cancel(false);
System.err.println("取消5秒延迟的任务");
System.out.println();
System.out.println("创建3秒延迟的任务");
ScheduledFuture<?> schedule2 = scheduledExecutorService.schedule(new Runnable() {
@Override
public void run() {
doTask("3s");
}
}, 3, TimeUnit.SECONDS);
Thread.sleep(4000);
}
private void doTask(String arg) {
System.out.println(arg + " 任务执行 ");
}
}

慕虎7371278
TA贡献1802条经验 获得超4个赞
以JavaScript为例:
function doTask() {
...
}
setTimeout(function() {
if (canDoTask) {
doTask();
} else {
setTimeout(doTask, 180000);
}
}, 300000);
添加回答
举报
0/150
提交
取消