ScheduledExecutorService是与ExecutorService类似的接口,但它可以定期执行任务。
Executor和ExecutorService的方法是在现场安排的,不会引入任何人工延迟。零或任何负值表示需要立即执行请求。
我们可以使用Runnable和Callable接口来定义任务。
public void execute() {
ScheduledExecutorService executorService
= Executors.newSingleThreadScheduledExecutor();
Future<String> future = executorService.schedule(() -> {
// ...
return "Hello world";
}, 1, TimeUnit.SECONDS);
ScheduledFuture<?> scheduledFuture = executorService.schedule(() -> {
// ...
}, 1, TimeUnit.SECONDS);
executorService.shutdown();
}
ScheduledExecutorService还可以在一些给定的固定延迟后调度任务:
executorService.scheduleAtFixedRate(() -> {
// ...
}, 1, 10, TimeUnit.SECONDS);
executorService.scheduleWithFixedDelay(() -> {
// ...
}, 1, 10, TimeUnit.SECONDS);
这里,scheduleAtFixedRate(Runnable命令,long initialDelay,long period,TimeUnit unit)方法创建并执行一个周期性操作,该操作在提供的初始延迟之后首先被调用,随后是给定的时间段,直到服务实例关闭。
所述scheduleWithFixedDelay(可运行命令,长在initialDelay,长的延迟,TIMEUNIT单元)方法与所述执行的一个的终止和的调用之间的给定的延迟创建并执行所提供的初始延迟后首先调用的周期性动作,并重复地下一个。