美文网首页Java进阶之路饥人谷技术博客Java
线程池的生命周期和拒绝策略

线程池的生命周期和拒绝策略

作者: java搬砖从来不加班 | 来源:发表于2021-08-15 20:53 被阅读0次

    线程池的生命周期

    线程池生命周期包括:

    • RUNNING:接收新的任务并处理队列中的任务
    • SHUTDOWN:不接收新的任务,但是处理队列中的任务
    • STOP:不接收新的任务,不处理队列中的任务,同时中断处理中的任务
    • TIDYING:所有的任务处理完成,有效的线程数是0
    • TERMINATED:terminated() 方法执行完毕。

    生命周期状态和方法对应的关系:

    image.png

    线程池的拒绝策略

    如果线程池中所有的线程都在忙碌,并且工作队列也满了(前提是工作队列是有界队列),那么此时提交任务,线程池就会拒绝接收。至于拒绝的策略,你可以通过 handler 这个参数来指定。

    ThreadPoolExecutor 已经提供了以下 4 种策略。

    • CallerRunsPolicy:提交任务的线程自己去执行该任务。
    • AbortPolicy:默认的拒绝策略,会 throws RejectedExecutionException。
    • DiscardPolicy:直接丢弃任务,没有任何异常抛出。
    • DiscardOldestPolicy:丢弃最老的任务,其实就是把最早进入工作队列的任务丢弃,然后把新任务加入到工作队列。

    以上内置拒绝策略均实现了 RejectedExecutionHandler 接口,若以上策略仍无法满足实际需要,完全可以自己扩展 RejectedExecutionHandler 接口。

    相关文章

      网友评论

        本文标题:线程池的生命周期和拒绝策略

        本文链接:https://www.haomeiwen.com/subject/pzfpbltx.html