线程池

作者: CheetahYCH | 来源:发表于2019-10-30 16:59 被阅读0次

    参数说明

    • corePoolSize 核心线程数,默认线程池为空提交任务才创建线程,如果当前运 行的线程数少于corePoolSize,(空闲状态的线程也时运行的线程)则创建新线程来处理任务;如果等于或者多于corePoolSize,则不再创建,核心线程在未设置allowCoreThreadTimeOut时不会被销毁,执行任务后会进入空闲状态,
    • maximumPoolSize 线程池允许创建的最大线程数
    • keepAliveTime 非核心线程闲置的超时时
    • TimeUnit keepAliveTime参数的时间单
    • workQueue 任务队列
    • ThreadFactory 线程工厂
    • RejectedExecutionHandler 饱和策略。这是当任务队列和线程池都满了时所采取的应对策略

    执行流程

    1. 如果线程池中的线程数未达到核心线程数,则创建核心线程处理任务。
    2. 如果线程数大于或者等于核心线程数,则将任务加入任务队列,线程池中的空闲线程会不断地从 任务队列中取出任务进行处理。
    3. 如果任务队列满了,并且线程数没有达到最大线程数,则创建非核心线程去处理任务。
    4. 如果线程数超过了最大线程数,则执行饱和策略。

    饱和政策

    • AbordPolicy,表示无法处理新任务,并抛出RejectedExecutionException异常。此外还有3种策略,它们分 别如下。
    • CallerRunsPolicy:用调用者所在的线程来处理任务。此策略提供简单的反馈控制机制,能够减缓 新任务的提交速度。
    • DiscardPolicy:不能执行的任务,并将该任务删除。
    • DiscardOldestPolicy:丢弃队列最近的任务,并执行当前的任务。

    相关文章

      网友评论

          本文标题:线程池

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