【scheduledexecutorservice】总结:
`ScheduledExecutorService` 是 Java 中用于调度任务执行的接口,属于 `java.util.concurrent` 包。它扩展了 `ExecutorService` 接口,支持定时和周期性任务的执行。该接口提供了多种方法,如 `schedule()`、`scheduleAtFixedRate()` 和 `scheduleWithFixedDelay()`,适用于需要在特定时间点或按固定间隔执行任务的场景。与普通的 `ExecutorService` 相比,`ScheduledExecutorService` 更适合处理需要延迟或重复执行的任务。
| 特性 | 说明 |
| 所属包 | `java.util.concurrent` |
| 继承关系 | 继承自 `ExecutorService` |
| 主要用途 | 调度任务,支持定时执行、周期性执行 |
| 支持的方法 | `schedule()`, `scheduleAtFixedRate()`, `scheduleWithFixedDelay()` |
| 适用场景 | 需要延迟执行或按固定频率执行任务的程序(如定时任务、心跳检测等) |
| 与普通 ExecutorService 的区别 | `ScheduledExecutorService` 可以控制任务的执行时间,而 `ExecutorService` 仅负责提交任务并管理线程池 |
使用示例:
```java
import java.util.concurrent.;
public class ScheduledExample {
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(2);
// 延迟1秒后执行一次
executor.schedule(() -> System.out.println("Delayed task"), 1, TimeUnit.SECONDS);
// 每隔2秒执行一次,首次延迟3秒
executor.scheduleAtFixedRate(() -> System.out.println("Fixed rate task"), 3, 2, TimeUnit.SECONDS);
// 每次任务完成后等待2秒再执行下一次
executor.scheduleWithFixedDelay(() -> System.out.println("Fixed delay task"), 3, 2, TimeUnit.SECONDS);
}
}
```
注意事项:
- 在任务执行过程中,如果发生异常,可能会导致后续任务无法正常执行,需做好异常处理。
- 使用完 `ScheduledExecutorService` 后应调用 `shutdown()` 方法关闭线程池,避免资源泄漏。
- 不同的调度方式(如固定速率和固定延迟)对任务执行的间隔计算方式不同,需根据实际需求选择。
通过合理使用 `ScheduledExecutorService`,可以有效提升程序中定时任务的灵活性和可控性。


