• java线程池工作原理


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

    maximumPoolSize

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


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

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

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

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

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

    4、DiscardPolicy:直接丢弃任务;

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

    我好菜呀
  • 相关阅读:
    /etc/alternatives
    linux Link
    JVM程序计数器
    面向对象的内存分析
    SpringBoot项目简单实现给邮箱发送验证码
    注解式SQL Select语句判空
    SQL Update时参数判空:传入参数为空时不更新对应字段,不为空时才更新
    MySQL数据库误Update找回数据的方法
    用户-角色-权限系统概述
    将一个数组转换为List
  • 原文地址:https://www.cnblogs.com/LinsenLi/p/9649287.html
Copyright © 2020-2023  润新知