zoukankan      html  css  js  c++  java
  • java线程池工作原理

    线程池的源码阅读比较简单,基本都是判断,当一个任务提交至线程池之后,
    1. 线程池首先当前运行的线程数量是否少于corePoolSize。如果是,则创建一个新的工作线程来执行任务。如果都在执行任务,则进入2.
    2. 判断BlockingQueue(阻塞队列)是否已经满了,如果还没有满,则将线程放入BlockingQueue。否则进入3.
    3. 如果创建一个新的工作线程将使当前运行的线程数量超过maximumPoolSize,则交给RejectedExecutionHandler(饱和策略)来处理任务。

    maximumPoolSize

    线程池中允许的最大线程数。如果当前阻塞队列满了,且继续提交任务,则创建新的线程执行任务,前提是当前线程数小于maximumPoolSize;


    handler——线程池的拒接任务策略

    线程池的饱和策略,当阻塞队列满了,且没有空闲的工作线程,如果继续提交任务,必须采取一种策略处理该任务,线程池提供了4种策略:

    1、AbortPolicy:直接抛出异常,默认策略;

    2、CallerRunsPolicy:用调用者所在的线程来执行任务;

    3、DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;

    4、DiscardPolicy:直接丢弃任务;

    当然也可以根据应用场景实现RejectedExecutionHandler接口,自定义饱和策略,如记录日志或持久化存储不能处理的任务。

    我好菜呀
  • 相关阅读:
    推荐影视
    《算法设计》一、引言:某些典型的问题
    使用google地图API
    Python导入不同文件夹下模块
    Pycharm之远程编程
    linux之scp
    Photoshop脚本之jpg转换成eps
    win7重新安装win7
    查看修改swap空间大小
    用 EasyBCD 在 Win7/8 中硬盘安装 Ubuntu
  • 原文地址:https://www.cnblogs.com/LinsenLi/p/9649287.html
Copyright © 2011-2022 走看看