Java实现终止线程池中正在运行的定时任务
时间: 2023-09-01 19:08:39 浏览: 50
可以通过以下步骤实现终止线程池中正在运行的定时任务:
1. 创建一个ScheduledExecutorService,并向其中提交一个定时任务。
2. 调用shutdown()方法来关闭线程池。该方法会等待所有已提交的任务执行完毕后才关闭线程池。
3. 调用awaitTermination()方法来等待线程池中的所有任务执行完毕。该方法会一直阻塞,直到所有任务执行完毕或等待时间超时。
4. 调用shutdownNow()方法来强制关闭线程池,并尝试终止正在执行的任务。该方法会返回一个List<Runnable>,其中包含了所有未执行的任务。
代码示例:
```java
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
// 向线程池中提交一个定时任务
ScheduledFuture<?> scheduledFuture = executor.schedule(() -> {
// 执行任务
}, 1, TimeUnit.SECONDS);
// 关闭线程池
executor.shutdown();
try {
// 等待线程池中的所有任务执行完毕
executor.awaitTermination(5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
// 抛出异常
}
// 尝试终止正在执行的任务
List<Runnable> unfinishedTasks = executor.shutdownNow();
if (!unfinishedTasks.isEmpty()) {
// 处理未执行的任务
}
```