ScheduledExecutorService的使用方法
时间: 2025-05-18 09:11:54 浏览: 19
### ScheduledExecutorService 使用方法与示例代码
#### 方法概述
`ScheduledExecutorService` 是 `java.util.concurrent` 包中的一个重要接口,继承自 `ExecutorService`。它提供了多种方法来调度任务的执行,包括一次性延迟执行的任务以及周期性执行的任务[^3]。
以下是其主要方法及其作用:
1. **`schedule(Runnable command, long delay, TimeUnit unit)`**
- 该方法用于在指定的延迟后执行一次任务。
- 参数说明:
- `command`: 要执行的任务。
- `delay`: 延迟时间。
- `unit`: 时间单位(如秒、毫秒等)。
2. **`scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)`**
- 该方法用于以固定的频率重复执行任务。
- 参数说明:
- `initialDelay`: 首次启动前的初始延迟。
- `period`: 后续每次执行之间的间隔时间。
- `unit`: 时间单位。
3. **`scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)`**
- 该方法用于以固定的延时方式重复执行任务。
- 参数说明:
- `initialDelay`: 首次启动前的初始延迟。
- `delay`: 每次任务完成后到下一次任务开始之前的等待时间。
- `unit`: 时间单位。
---
#### 示例代码
##### 1. 单次延迟任务 (`schedule`)
下面是一个单次延迟任务的示例代码,展示如何使用 `schedule()` 方法让任务在一定延迟后执行。
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduleExample {
public static void main(String[] args) throws InterruptedException {
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
System.out.println("当前时间:" + System.currentTimeMillis());
// 设置任务在3秒后执行
scheduler.schedule(() -> {
System.out.println("任务执行时间:" + System.currentTimeMillis());
}, 3, TimeUnit.SECONDS);
Thread.sleep(5000); // 等待主线程观察效果
scheduler.shutdown();
}
}
```
---
##### 2. 固定频率任务 (`scheduleAtFixedRate`)
此示例展示了如何通过 `scheduleAtFixedRate()` 让任务每隔一段时间就执行一次。
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class FixedRateExample {
public static void main(String[] args) throws InterruptedException {
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
System.out.println("任务开始");
// 初始延迟1秒,后续每2秒执行一次
scheduler.scheduleAtFixedRate(() -> {
System.out.println("任务执行时间:" + System.currentTimeMillis());
}, 1, 2, TimeUnit.SECONDS);
Thread.sleep(10000); // 运行10秒后停止
scheduler.shutdown();
}
}
```
---
##### 3. 固定延时任务 (`scheduleWithFixedDelay`)
此示例演示了如何通过 `scheduleWithFixedDelay()` 实现基于上一次任务完成后的固定延时再执行下次任务的功能。
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class FixedDelayExample {
public static void main(String[] args) throws InterruptedException {
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
System.out.println("任务开始");
// 初始延迟1秒,每次任务结束后等待2秒再执行下一次
scheduler.scheduleWithFixedDelay(() -> {
try {
System.out.println("任务执行时间:" + System.currentTimeMillis());
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}, 1, 2, TimeUnit.SECONDS);
Thread.sleep(10000); // 运行10秒后停止
scheduler.shutdown();
}
}
```
---
### 注意事项
- 如果任务抛出未捕获异常,则可能导致整个线程终止。因此,在实际开发中建议对任务逻辑进行健壮性封装,或者设置合理的错误处理机制[^4]。
- 当不再需要继续运行任务时,请调用 `shutdown()` 或者 `shutdownNow()` 来释放资源并关闭线程池[^5]。
---
问题
阅读全文
相关推荐


















