java 的 ScheduledExecutorService 正确使用
时间: 2024-12-12 20:15:00 浏览: 18
`ScheduledExecutorService` 是 Java 提供的一个接口,用于在指定的延迟之后运行任务,或者定期执行任务。它是 `ExecutorService` 的子接口,提供了更丰富的定时任务执行功能。以下是 `ScheduledExecutorService` 的正确使用方法:
### 1. 创建 ScheduledExecutorService 实例
可以通过 `Executors` 工厂类来创建 `ScheduledExecutorService` 的实例。例如:
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);
```
### 2. 调度任务
`ScheduledExecutorService` 提供了几种调度任务的方法:
#### 2.1 `schedule(Runnable command, long delay, TimeUnit unit)`
在指定的延迟之后运行任务一次。
```java
scheduledExecutorService.schedule(() -> {
System.out.println("任务执行时间: " + System.currentTimeMillis());
}, 5, TimeUnit.SECONDS);
```
#### 2.2 `scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)`
在指定的初始延迟之后,定期执行任务,任务之间的时间间隔是固定的。
```java
scheduledExecutorService.scheduleAtFixedRate(() -> {
System.out.println("定期任务执行时间: " + System.currentTimeMillis());
}, 2, 5, TimeUnit.SECONDS);
```
#### 2.3 `scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)`
在指定的初始延迟之后,定期执行任务,任务之间的延迟是固定的。
```java
scheduledExecutorService.scheduleWithFixedDelay(() -> {
System.out.println("延迟任务执行时间: " + System.currentTimeMillis());
}, 2, 5, TimeUnit.SECONDS);
```
### 3. 关闭 ScheduledExecutorService
当不再需要 `ScheduledExecutorService` 时,应该关闭它以释放资源。
```java
scheduledExecutorService.shutdown();
```
### 完整示例
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledExecutorServiceExample {
public static void main(String[] args) {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);
// 任务1:延迟5秒执行一次
scheduledExecutorService.schedule(() -> {
System.out.println("任务1执行时间: " + System.currentTimeMillis());
}, 5, TimeUnit.SECONDS);
// 任务2:初始延迟2秒,每5秒执行一次
scheduledExecutorService.scheduleAtFixedRate(() -> {
System.out.println("任务2执行时间: " + System.currentTimeMillis());
}, 2, 5, TimeUnit.SECONDS);
// 任务3:初始延迟2秒,每5秒执行一次,延迟5秒
scheduledExecutorService.scheduleWithFixedDelay(() -> {
System.out.println("任务3执行时间: " + System.currentTimeMillis());
}, 2, 5, TimeUnit.SECONDS);
// 等待一段时间后关闭
try {
TimeUnit.SECONDS.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
scheduledExecutorService.shutdown();
}
}
```
###
阅读全文