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接口,自定义饱和策略,如记录日志或持久化存储不能处理的任务。

    我好菜呀
  • 相关阅读:
    (十三)过滤器Filter(转)
    (十二)会话跟踪技术之servlet通信(forward和include)
    (十一)会话跟踪技术之作用域(request、session、servletContext)
    openjdk源码目录结构
    java socket相关的timeout
    eclipse创建maven web app
    hadoop mapred和mapreduce包
    hadoop shuffle
    bash shell和进程
    bash shell中的特殊用法
  • 原文地址:https://www.cnblogs.com/LinsenLi/p/9649287.html
Copyright © 2011-2022 走看看