在Java中,`ScheduledExecutorService` 是一个非常有用的工具类,它继承自 `ExecutorService` 接口,提供了定时执行任务的功能。通过 `ScheduledExecutorService`,我们可以轻松地安排任务在未来某个时间点执行,或者以固定的时间间隔重复执行。
什么是ScheduledExecutorService?
`ScheduledExecutorService` 提供了两种主要的方法来安排任务:
1. `schedule(Runnable command, long delay, TimeUnit unit)`
这个方法用于安排任务在指定的延迟时间后执行一次。
2. `scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)` 和 `scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)`
这两个方法用于安排任务以固定的频率或延迟重复执行。
示例代码
下面是一个简单的例子,展示如何使用 `ScheduledExecutorService` 来安排任务。
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledExecutorExample {
public static void main(String[] args) {
// 创建一个ScheduledExecutorService实例
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
// 定义要执行的任务
Runnable task = () -> System.out.println("任务执行于: " + System.currentTimeMillis());
// 安排任务在3秒后开始执行,并每隔2秒重复执行一次
scheduler.scheduleAtFixedRate(task, 3, 2, TimeUnit.SECONDS);
// 设置程序运行一段时间后关闭调度器
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
System.out.println("关闭调度器...");
scheduler.shutdown();
try {
if (!scheduler.awaitTermination(60, TimeUnit.SECONDS)) {
scheduler.shutdownNow();
}
} catch (InterruptedException e) {
scheduler.shutdownNow();
}
}));
}
}
```
代码解析
1. 创建调度器
使用 `Executors.newScheduledThreadPool(1)` 创建了一个线程池,其中包含一个线程。
2. 定义任务
定义了一个简单的 `Runnable` 任务,打印当前时间戳。
3. 安排任务
使用 `scheduleAtFixedRate` 方法安排任务在3秒后开始执行,并以2秒为间隔重复执行。
4. 关闭调度器
使用 `Runtime.getRuntime().addShutdownHook` 添加一个钩子,在程序结束时关闭调度器,确保资源被正确释放。
总结
`ScheduledExecutorService` 是Java并发编程中的一个重要工具,特别适合需要定时或周期性执行任务的场景。通过合理配置延迟和间隔,可以实现各种复杂的任务调度需求。
希望这个简单的示例能帮助你快速上手 `ScheduledExecutorService` 的使用!