在 Java 中,停止线程池可以通过以下两个步骤来实现:

  1. 调用方法停止线程池:
    1. 调用线程池的 shutdown() 方法来关闭线程池。该方法会停止线程池的接受新任务,并尝试将所有未完成的任务完成执行;
    2. 调用线程池的 shutdownNow() 方法来关闭线程池。该方法会停止线程池的接受新任务,并尝试停止所有正在执行的任务。该方法会返回一个未完成任务的列表,这些任务将被取消。
  2. 等待线程池停止:在关闭线程池后,通过调用 awaitTermination() 方法来等待所有任务完成执行。该方法会阻塞当前线程,直到所有任务完成执行或者等待超时。

下面是一个示例代码,演示如何中止线程池:

ExecutorService executor = Executors.newFixedThreadPool(10);
// 提交任务到线程池
for (int i = 0; i < 100; i++) {
    executor.submit(new MyTask());
}
// 关闭线程池
executor.shutdown();
try {
    // 等待所有任务完成执行
    if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
        // 如果等待超时,强制关闭线程池
        executor.shutdownNow();
    }
} catch (InterruptedException e) {
    // 处理异常
}

在上面的示例代码中,首先创建了一个线程池,然后提交了 100 个任务到线程池中。然后,通过调用 shutdown() 方法关闭线程池,再通过调用 awaitTermination() 方法等待所有任务完成执行。如果等待超时,将强制调用 shutdownNow() 方法来停止所有正在执行的任务。最后,在 catch 块中处理中断异常。

特殊说明

以上内容来自我的《Java 面试突击训练营》,这门课程是有着十几年工作经验(前 360 开发工程师),10 年面试官经验的我,花费 4 年时间打磨完成的一门视频面试课。学完训练营的课程之后,基本可以应对目前市面上绝大部分公司的面试了,并且课程配备了 9 大就业服务,帮助上千人找到 Java 工作,其中上百人拿到大厂 Offer,学员最高薪资 70W 年薪,面试课目录和 9 大服务如下:

加我微信咨询:vipStone【备注:训练营】