猿问

ScheduledExecutorService 将一个定时任务延迟

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

慕尼黑8549860
浏览 1167回答 2
2回答

largeQ

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

以JavaScript为例: function doTask() { ... } setTimeout(function() { if (canDoTask) { doTask(); } else { setTimeout(doTask, 180000); } }, 300000);
随时随地看视频慕课网APP

相关分类

Java
我要回答