线程池怎么关闭知道吗?

线程池怎么关闭知道吗?
关闭线程池可以通过调用线程池的 shutdown
或 shutdownNow
方法来实现。它们的原理是遍历线程池中的工作线程,然后逐个调用线程的 interrupt
方法来中断线程,因此无法响应中断的任务可能会永远无法终止。
shutdown()
方法将线程池的状态设置为 shutdown
,但并不会立即停止:
- 停止接收外部提交的任务。
- 内部正在执行的任务和队列中等待的任务会继续执行,直到执行完毕。
- 等待第二步完成后,线程池才真正停止。
shutdownNow()
方法将线程池的状态设置为 stop
。一般情况下会立即停止,但并不保证立即停止:
- 与
shutdown()
方法一样,首先停止接收外部提交的任务。 - 忽略队列中等待的任务。
- 尝试中断正在执行的任务。
- 返回未执行的任务列表。
简单来说,shutdownNow()
方法可以立即停止线程池,包括正在执行和等待的任务。这种方法会立即生效,但也存在一定的风险。
而 shutdown()
方法只关闭提交通道,对于已经提交的任务,线程池会继续执行它们,直到执行完毕后才彻底停止线程池。