ScheduledThreadPoolExecutor中如何设置执行周期
时间: 2023-08-13 21:54:42 浏览: 136
在 `ScheduledThreadPoolExecutor` 中,可以使用 `scheduleAtFixedRate()` 或 `scheduleWithFixedDelay()` 方法来设置任务的执行周期。
1. 使用 `scheduleAtFixedRate()` 方法:
```java
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
Runnable task = ...; // 定义要执行的任务
long initialDelay = ...; // 设置初始延迟时间,单位为毫秒
long period = ...; // 设置执行周期,单位为毫秒
executor.scheduleAtFixedRate(task, initialDelay, period, TimeUnit.MILLISECONDS);
```
这样设置后,任务将在初始延迟时间后开始执行,然后每隔指定的周期执行一次。如果任务的执行时间超过了周期时间,那么下一次执行将会立即开始,不会等待上一次执行完毕。
2. 使用 `scheduleWithFixedDelay()` 方法:
```java
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
Runnable task = ...; // 定义要执行的任务
long initialDelay = ...; // 设置初始延迟时间,单位为毫秒
long delay = ...; // 设置执行完成后的延迟时间,单位为毫秒
executor.scheduleWithFixedDelay(task, initialDelay, delay, TimeUnit.MILLISECONDS);
```
这样设置后,任务将在初始延迟时间后开始执行,然后在任务执行完成后,再等待指定的延迟时间后开始下一次执行。这样可以保证每次执行之间都有固定的间隔。
需要注意的是,`initialDelay` 表示首次执行的延迟时间,`period` 或 `delay` 表示执行周期或执行完成后的延迟时间。参数单位可以根据需要选择,例如 `TimeUnit.MILLISECONDS` 表示毫秒。另外,`scheduleAtFixedRate()` 和 `scheduleWithFixedDelay()` 方法还可以返回一个 `ScheduledFuture` 对象,用于对任务进行控制和取消。
阅读全文