# 停止线程池的方法

停止线程池时常用的方法

方法 作用
shutdown() 停止线程 不会立即停止,只有将正在执行的任务和等待的任务执行之后才会停止线程,但是会拒绝新任务的提交
shutdownNow() 立刻停止线程 立刻停止线程,不会考虑是否有线程正在执行,会返回还未执行的任务
isShutdown() 是否执行过shutdown() 即判断是否可以接收新任务提交
isTerminated() 线程池是否完全终止 只有线程完全执行完,才会返回true
awaitTermination() 一段时间内线程池是否完全终止 用于判断一段时间内线程是否完全执行完毕

# 任务太多,怎么拒绝

拒绝时机

  1. 当Executor关闭时,提交新任务会被拒绝。
  2. 当Executor对最大线程和工作队列容量使用有限边界并且已经饱和时

四种拒绝策略

策略 描述
AbortPolicy 抛出异常
DiscardPolicy 丢弃新任务,并不会提示给你
DiscardOldestPolicy 丢弃最老的任务
CallerRunsPolicy 让提交任务的线程去执行任务

# 线程池的钩子方法

可以在每个任务执行前后加一些功能,比如日志、统计