线程池如何关闭

可以通过调用线程池的shutdown或shutdownNow方法来关闭线程池。

一、 shutdown() 将线程池状态置为shutdown,并不会立即停止:

  1. 停止接收外部submit的任务

  2. 内部正在跑的任务和队列里等待的任务,会执行完

  3. 等到第二步完成后,才真正停止

当线程池调用shutdown()方法时,线程池的状态则马上变成SHUTDOWN状态,这时候不能再往线程池中添加任何任务,否则将会抛出RejectedExecutionException异常,但是此时线程池不会立即退出,直到线程池中的任务都已经处理完成,才会退出。

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

  1. 和shutdown()一样,先停止接收外部提交的任务

  2. 忽略队列里等待的任务

  3. 尝试将正在跑的任务interrupt中断

  4. 返回未执行的任务列表

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

shutdownNow()能立即停止线程池,正在跑的和正在等待的任务都停下了。这样做立即生效,但是风险也比较大。
shutdown()只是关闭了提交通道,用submit()是无效的;而内部的任务该怎么跑还是怎么跑,跑完再彻底停止线程池。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值