线程池怎么关闭知道吗?

关闭线程池可以通过调用线程池的 shutdownshutdownNow 方法来实现。它们的原理是遍历线程池中的工作线程,然后逐个调用线程的 interrupt 方法来中断线程,因此无法响应中断的任务可能会永远无法终止。

shutdown() 方法将线程池的状态设置为 shutdown,但并不会立即停止:

  1. 停止接收外部提交的任务。
  2. 内部正在执行的任务和队列中等待的任务会继续执行,直到执行完毕。
  3. 等待第二步完成后,线程池才真正停止。

shutdownNow() 方法将线程池的状态设置为 stop。一般情况下会立即停止,但并不保证立即停止:

  1. shutdown() 方法一样,首先停止接收外部提交的任务。
  2. 忽略队列中等待的任务。
  3. 尝试中断正在执行的任务。
  4. 返回未执行的任务列表。

简单来说,shutdownNow() 方法可以立即停止线程池,包括正在执行和等待的任务。这种方法会立即生效,但也存在一定的风险。

shutdown() 方法只关闭提交通道,对于已经提交的任务,线程池会继续执行它们,直到执行完毕后才彻底停止线程池。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题