简单的ScheduledExecutorService 使用方法
时间: 2023-05-25 22:01:01 浏览: 203
基于ScheduledExecutorService的两种方法(详解)
作为 ChitGPT, 我可以向您解释 ScheduledExecutorService 是什么,以及如何使用它:
ScheduledExecutorService 是 Java 平台上的一种执行器服务,允许开发人员调度任务在未来某个时间执行,或是按照某种规律的周期性执行。它通常用于具有定时性质的任务,例如定期备份服务、定时发送通知/邮件等。
使用 ScheduledExecutorService 可以通过以下步骤完成:
1. 创建 ScheduledExecutorService 对象
可以通过调用 Executors 类的 newScheduledThreadPool 方法创建 ScheduledExecutorService,该方法接受一个 integer 参数,指定线程池中的线程数。
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);
2. 创建 Runnable 或 Callable 对象
Runnable 接口代表可以由线程执行的任务,Callable 接口是一个具有返回值的任务。根据具体需求创建对应的对象。
Runnable runnableTask = new Runnable() {
@Override
public void run() {
// 任务执行逻辑
}
};
3. 调度任务
可以通过 schedule 方法,指定任务在期望时间点执行。
scheduledExecutorService.schedule(runnableTask, 5, TimeUnit.SECONDS);
第一个参数为需要执行的任务,第二个参数为延迟执行的时间,第三个参数为时间单位。也就是说,这个任务将在当前时间的 5 秒后执行。
如果需要定期执行,则可以通过 scheduleAtFixedRate 或 scheduleWithFixedDelay 方法来实现。前者表示固定频率,即每隔一定时间开始执行,后者表示固定时间间隔,即上一个任务结束后固定时间后再次执行。
scheduledExecutorService.scheduleAtFixedRate(runnableTask, 1, 10, TimeUnit.SECONDS);
上述代码表示在 1 秒后开始执行任务,然后每隔 10 秒再次执行。
4. 关闭 ScheduledExecutorService
执行完所有的任务后,需要关闭 ScheduledExecutorService。
scheduledExecutorService.shutdown();
注意:shutdown 方法只是请求关闭 ScheduledExecutorService,所有已经调度但还未开始执行的任务将被取消。如果希望等待所有任务执行完毕再关闭 ScheduledExecutorService,则可以使用 awaitTermination 方法。
scheduledExecutorService.shutdown();
try {
if (!scheduledExecutorService.awaitTermination(800, TimeUnit.MILLISECONDS)) {
scheduledExecutorService.shutdownNow();
}
} catch (InterruptedException e) {
scheduledExecutorService.shutdownNow();
Thread.currentThread().interrupt();
}
阅读全文