308 字
2 分钟
线程池怎么关闭知道吗?

线程池怎么关闭知道吗?#

可以通过调用线程池的shutdown或shutdownNow方法来关闭线程池。它们的原理是遍历线程池中的工作线程,然后逐个调用线程的 interrupt 方法来中断线程,所以无法响应中断的任务可能永远无法终止。 shutdown() 将线程池状态置为 shutdown,并不会立即停止

  1. 停止接收外部 submit 的任务
  2. 内部正在跑的任务和队列里等待的任务,会执行完
  3. 等到第二步完成后,才真正停止

shutdownNow() 将线程池状态置为 stop。一般会立即停止,事实上不一定

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

shutdown 和 shutdownnow 简单来说区别如下:

  • shutdownNow()能立即停止线程池,正在跑的和正在等待的任务都停下了。这样做立即生效,但是风险也比较大。
  • shutdown()只是关闭了提交通道,用 submit()是无效的;而内部的任务该怎么跑还是怎么跑,跑完再彻底停止线程池。
线程池怎么关闭知道吗?
作者
强人自传
发布于
2023-01-19
许可协议
CC BY-NC-SA 4.0