• Java 线程池之ThreadPoolExecutor学习总结


    前提

    java version "1.8.0_25"

    池简述

    软件开发活动中,我们经常会听到数据库连接池、内存池、线程池等各种“池”概念,这些“池”到底是什么东西呢?程序的世界里,我们可以将池简单的理解为一种容器类数据结构,比如列表。程序处理信息的过程中,可能会依赖某些资源或者对象(暂且统一称之为对象),比如数据库连接,来执行一些高频操作,比如数据表查询,此时,如果被依赖对象的存活时间比较短,那就意味着需要频繁的创建和销毁对象,这可能会很耗时、耗系统资源(CPU、内存、磁盘、网络等)。为了解决这个问题,进行程序设计时,可能会考虑在程序初始化时,预先创建一批所需对象,并存储到池中,或者根据需要即时创建对象,并在使用完成后,将对象添加到池中,这样,当程序需要(再次)使用对象时,可以直接从池中直接获取现有的对象,节省了频繁创建和销毁对象带来的资源浪费,这就是池的作用,为程序提供复用对象或者提前分配资源的能力。

    ThreadPoolExecutor线程池介绍

    下文仅针对线程池的一些要点做介绍

    任务处理流程

    核心线程池大小(corePoolSize)和最大线程池大小(maximumPoolSize)

    ThreadPoolExecutor会根据corePoolSize(保持存活(不允许超时退出等)的最小工作线程数,如果设置了allowCoreThreadTimeOuttrue,则该值为0。可通过getPoolSize方法获取该值) 和maximumPoolSize(线程池中允许的最大线程数,可通过getMaximumPoolSize获取该值)设置的界限自动调整线程池的大小。

    当通过execute(Runnable) 方法提交新任务后,如果正在运行的线程的数量小于corePoolSize,则创建新线程来处理请求,

  • 相关阅读:
    CentOS7安装superset2.0
    scapy sniff与command方法
    Java安全之CC3
    MySQL 中如何归档数据
    安装使用electron
    【Java面试题】6年开发去A里面试P6竟被Mysql难住了,说一下你对行锁、临键锁、间隙锁的理解
    6个步骤强化 CI/CD 安全
    csdn最新最全pytest系列——pluggy插件源码解读(一)HookspecMarker类和HookimplMarker类分析
    Java中的volatile关键字
    spring集成mybatis
  • 原文地址:https://blog.csdn.net/Candyz7/article/details/127609593