什么是ScheduledExecutorService
ScheduledExecutorService 是ExecutorService的子接口,专门用于定期执行任务或延迟执行任务。这个接口提供了一种方便的方式来处理周期性或延时任务,相比传统的Timer,ScheduledExecutorService具有更清大的功能和更好的灵活性。
主要特性
- 定期执行任务:
- 可以设置一个任务以固定的时间间隔重复执行。例如,您可以每秒执行一次某个任务。
- 延迟执行任务:
- 可以在指定的延迟后执行任务。例如,可以安排在 5 秒后执行某个任务。
- 线程池管理:
ScheduledExecutorService使用线程池来管理执行任务的线程,这样可以提高性能并减少资源消耗。
- 灵活性:
- 提供多种方法来安排任务,包括使用
schedule(),scheduleAtFixedRate(), 和scheduleWithFixedDelay()等。
- 提供多种方法来安排任务,包括使用
主要方法
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
// 延迟5秒执行任务
scheduler.schedule(() -> System.out.println("这是延迟5s的任务"), 5, TimeUnit.SECONDS);
// 每2秒执行一次任务
scheduler.scheduleAtFixedRate(() -> System.out.println("我是2s的任务"), 0, 2, TimeUnit.SECONDS);
// 每次任务完成后延迟1秒再执行
scheduler.scheduleWithFixedDelay(() -> System.out.println("我是完成任务后执行的任务"), 0, 1, TimeUnit.SECONDS);
// 关闭调度器(可以根据需求进行调用)
// scheduler.shutdown();
schedule(): 用于安排一个任务在指定的延迟后执行。
- delay:延时的时间
- unit:时间单位
ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
<V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
scheduleAtFixedRate(): 用于安排一个任务以固定的时间间隔执行,第一次执行会在指定的延迟后执行。
- command:runnable任务
- initialDelay:任务首次执行前的延迟时间
- period:周期时间
- unit:时间单位
ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
scheduleWithFixedDelay(): 用于安排一个任务在每次执行后延迟指定的时间,然后再执行下一个任务。
- command:runnable任务
- initialDelay:任务首次执行前的延迟时间
- delay:延时时间
- unit:时间单位
ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
注意事项
- 资源管理:使用完
ScheduledExecutorService后,建议调用shutdown()方法来关闭线程池,释放资源。 - 异常处理:在定时任务中,如果发生未处理的异常,可能会导致调度服务终止。因此,确保在任