如何可以等 ScheduledExecutorService 执行完成,再执行主线程
时间: 2023-10-25 21:09:30 浏览: 38
可以使用 `ScheduledExecutorService` 提供的 `awaitTermination` 方法,该方法会等待所有任务执行完成后再继续执行主线程。具体使用方法如下:
1. 首先在主线程中创建一个 `ScheduledExecutorService` 对象,并且提交需要执行的任务;
2. 调用 `shutdown` 方法关闭 `ScheduledExecutorService`,这样就不会再接受新的任务;
3. 调用 `awaitTermination` 方法等待任务执行完成,如果超时了会返回 `false`,否则返回 `true`。
示例代码如下:
```java
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.schedule(() -> {
// 执行任务
}, 1, TimeUnit.SECONDS);
executor.shutdown(); // 关闭 executor
try {
boolean terminated = executor.awaitTermination(5, TimeUnit.SECONDS); // 等待任务执行完成,最多等待 5 秒
if (!terminated) {
System.out.println("任务执行超时");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
```
注意:在调用 `awaitTermination` 方法前必须先调用 `shutdown` 方法,否则会抛出 `RejectedExecutionException` 异常。