线程池的七大核心参数以及常用的四种线程池详解

 更新时间:2025年05月07日 09:59:28   作者:机智小袁  
这篇文章主要介绍了线程池的七大核心参数以及常用的四种线程池使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

引言

我们通过线程池可以实现已创建线程的复用,减少资源的消耗;控制并发的数量;以及对线程进行统一的管理。

下面我会对线程池的核心参数以及常用的线程池种类进行详细的讲解。

7大核心参数

int corePoolSize 核心线程最大数量

核心线程:

  • 线程池中有两类线程:核心线程和非核心线程。
  • 核心线程默认情况下会一直存在于线程池中,即使这个核心线程什么都不干,而非核心线程如果长时间的闲置,就会被销毁。

int maximumPoolSize 线程总数量最大值

改值等于核心线程数+非核心线程数

long keepAliveTime 非核心线程的闲置超时时间

非核心线程闲置时间超过此值就会被销毁

TimeUnit unit (keepAliveTime的单位)

TimeUnit是一个枚举类型:

  • NANOSECONDS : 1微毫秒,
  • MICROSECONDS:1微秒
  • MILLSECONDS:1毫秒
  • SECONDS:1秒
  • MINUTES:1分
  • HOURS:1小时
  • DAYS:1天

BlockingQueue workQueue 阻塞队列

常见的几个阻塞队列:

  • LinkedBlockingQueue

链式阻塞队列,默认大小:Interger.MAX_VALUE,可以指定大小。

  • ArrayBlockingQueue

数组阻塞队列,需要指定大小

  • SynchronousQueue

同步队列,内部容量为0,每个put操作都必须等待一个take操作。反之亦然

  • DelayQueue

延迟队列,队列中的元素之后当其指定的延迟时间到了,才能从队列中获取到改元素。

ThreadFactory threadFactory 线程工厂

创建线程的工厂,用于批量创建线程,如果不指定,会新建一个默认的线程工厂。

RejectedExecutionHandler handler 拒绝策略

拒绝处理策略,当无法创建新线程处理任务并且阻塞队列已满时就会采用拒绝处理策略。

jdk默认四种策略:

  • ThreadPoolExecutor.AbortPolicy:默认拒绝处理策略,丢弃任务并抛出异常
  • ThreadPollExecutor.DiscardPolicy:丢弃新来的任务,但不抛出异常
  • ThreadPollExecutor.DiscardOldestPolicy:丢弃阻塞队列头部(最旧)的任务,然后重新尝试执行程序,(如果再次失败,重复此过程)
  • ThreadPollExecutor.CallerRunPolicy:由调用的线程去处理改任务。只适用于并发小的情况。

常用的四种线程池

newCachedThreadPool (可缓存线程池)

核心线程数为0,总线程数是最大整数,当需要执行很多短时任务时它的服用率比较高,会显著提升性能。并且线程空闲60s就会被回收,所以如果没有任务,它并不会占用很多资源。

newFixedThreadPool(指定工作线程数量的线程池)

核心线程数等于最大线程数。也就是该线程池中没有非核心线程。

newSingleThreadPool(单线程化的线程池)

只有一个核心线程,所有任务按照先来先执行的顺序执行。

newScheduledThreadPool(定长线程池)

这个线程池指定了核心线程的数量,线程总数可以创建整数的最大数个。

该线程池支持定时以及周期性任务执行。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java之idea @NotNull @Nullable 注解使用

    Java之idea @NotNull @Nullable 注解使用

    这篇文章主要介绍了Java之idea @NotNull @Nullable 注解使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • SpringBoot中的404错误:原因、影响及解决策略

    SpringBoot中的404错误:原因、影响及解决策略

    本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误、依赖缺失或版本不兼容、配置错误和服务器配置问题,解决方法包括检查URL路径、审查控制器配置、配置静态资源
    2025-02-02
  • 2020JDK1.8安装教程详解(一次就可安装成功)

    2020JDK1.8安装教程详解(一次就可安装成功)

    这篇文章主要介绍了2020JDK1.8安装教程详解(一次就可安装成功),本文通过图文并茂的形式分步骤给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-08-08
  • 详解java开发webservice的几种方式

    详解java开发webservice的几种方式

    webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,有兴趣的可以了解一下。
    2016-11-11
  • Java的Socket通讯基础编程完全指南

    Java的Socket通讯基础编程完全指南

    这篇文章主要介绍了Java的Socket通讯基础编程,包括对Socket服务器的并发访问方法,是Java网络编程中的重要知识,相当推荐!需要的朋友可以参考下
    2015-08-08
  • Java实现顺序表和链表结构

    Java实现顺序表和链表结构

    大家好,本篇文章主要讲的是Java实现顺序表和链表结构,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • java接口类中的@selectProvider接口的使用及说明

    java接口类中的@selectProvider接口的使用及说明

    这篇文章主要介绍了java接口类中的@selectProvider接口的使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java实现文件复制及文件夹复制几种常用的方式

    Java实现文件复制及文件夹复制几种常用的方式

    这篇文章主要给大家介绍了关于Java实现文件复制及文件夹复制几种常用的方式,java复制文件的方式其实有不少种,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)

    Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)

    这篇文章主要介绍了Java导入、导出excel的相关资料,讲解了使用Java和ApachePOI库将数据导出为Excel文件,包括创建工作簿、工作表、行和单元格,设置样式和字体,合并单元格,添加公式和下拉选择等功能,需要的朋友可以参考下
    2025-03-03
  • java虚拟机钩子关闭函数addShutdownHook的操作

    java虚拟机钩子关闭函数addShutdownHook的操作

    这篇文章主要介绍了java虚拟机钩子关闭函数addShutdownHook的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02

最新评论