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

    我好菜呀
  • 相关阅读:
    数据库索引学习
    JavaScript提高:002:ASP.NET使用easy UI实现tab效果
    jQuery效果之显示与隐藏
    leetcode
    走进Struts2(五)— 值栈和OGNL
    Html中的超链接
    再理解 as3.0接口
    easyui combobox 三级级联 input 两种实现
    三层登录实例VB.NET版具体解释---理论加实战篇
    如何用Delphi开发网游外挂
  • 原文地址:https://www.cnblogs.com/LinsenLi/p/9649287.html
Copyright © 2011-2022 走看看