Executors关闭该线程
时间: 2024-10-09 17:01:31 浏览: 10
在Java中,`Executors` 提供的线程池管理工具允许我们创建线程池并在适当的时候关闭它们。当你不再需要线程池时,通常会通过调用 `shutdown()` 或 `shutdownNow()` 来关闭线程池。
- `shutdown()`:这是一个渐进式的关闭过程,线程池会在接收到来自客户端的新任务时拒绝这些任务,并在处理完现有的任务后停止接受新任务。这种方式保证了已提交的任务都能完整执行,适合于长时间运行的任务。
- `shutdownNow()`:这是一种强制性的关闭方式,会立刻尝试停止正在执行的所有任务,然后关闭线程池。这种方法可能会导致一些任务在执行过程中被中断,适合于紧急情况下的快速清理。
下面是一个例子:
```java
ExecutorService executor = Executors.newFixedThreadPool(5);
// ... 线程池使用完毕
executor.shutdown(); // 渐进式关闭
try {
if (!executor.awaitTermination(60, TimeUnit.SECONDS)) { // 等待60秒,如果线程还没关闭,就强制停止
executor.shutdownNow();
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 重新设置中断标志
}
```
在这个例子中,`awaitTermination()` 方法会阻塞主线程,直到线程池内的所有任务都完成或者等待时间到达。如果超过了等待时间,我们就调用 `shutdownNow()` 强制关闭线程池。
阅读全文