ScheduledExecutorService 参数
时间: 2025-03-26 10:36:06 浏览: 28
### Java 并发工具类:ScheduledExecutorService 参数说明及使用示例
#### 创建 ScheduledExecutorService 实例
为了创建 `ScheduledExecutorService` 的实例,通常通过 `Executors` 工具类来完成。下面是一个简单的例子展示如何创建一个具有固定数量线程的调度器:
```java
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(4);
```
此代码片段展示了创建了一个拥有四个核心线程的调度服务[^4]。
#### 定义可重复执行的任务
定义一个实现了 `Runnable` 接口的任务对象,该任务将在指定的时间间隔内被反复调用:
```java
Runnable task = () -> System.out.println("Executing Task!");
```
这段代码定义了一个打印消息到控制台的任务[^3]。
#### 调度一次性任务
对于只需要运行一次的任务,可以使用如下方法之一进行安排,在给定延迟之后仅执行一次:
```java
scheduler.schedule(task, 5, TimeUnit.SECONDS); // 延迟五秒后执行
```
上述语句表示在当前时间基础上等待五秒钟再启动任务[^2]。
#### 设置周期性任务
如果希望某个操作能够按照固定的速率或频率不断循环,则应采用以下两种方式之一:
- **fixedRate**: 每次触发都是基于前一次开始时刻计算下一次触发点;即使上一轮尚未结束也会按时开启新一轮。
```java
scheduler.scheduleAtFixedRate(task, 0, 1, TimeUnit.MINUTES); // 零初始延时,每分钟执行一次
```
- **fixedDelay**: 下轮启动取决于本轮实际终止之时起算的新起点;即只有当上一回合完全结束后才会计数下一回的等待期。
```java
scheduler.scheduleWithFixedDelay(task, 0, 1, TimeUnit.HOURS); // 零初始延时,每次完成后等待一个小时再次执行
```
这些函数允许开发者灵活设定任务首次执行之前的等待时间和后续各次之间的间隔长度。
#### 关闭资源释放
最后不要忘记适时关闭调度器以确保所有相关联的线程都能正常退出,并且不会占用过多系统资源:
```java
scheduler.shutdown();
try {
if (!scheduler.awaitTermination(800, TimeUnit.MILLISECONDS)) {
scheduler.shutdownNow();
}
} catch (InterruptedException e) {
scheduler.shutdownNow();
}
```
以上代码尝试优雅地停止所有的活动任务并等待它们全部完成,超时时则强制中断剩余未决项。
阅读全文
相关推荐


















