当前位置: 首页 > news >正文

ThreadPoolExecutor有哪些核心的配置参数?

ThreadPoolExecutor 是 Java 中强大的线程池实现,具有多种配置参数,可以灵活地根据具体应用需求进行调整。以下是 ThreadPoolExecutor 的核心配置参数及其简要说明:

1. corePoolSize

  • 描述:核心线程池的大小,即最小保持存活的线程数量。即使这些线程在空闲状态,它们也不会被回收,除非设置了允许核心线程超时。
  • 作用:确保总有 corePoolSize 个线程可以处理任务。

2. maximumPoolSize

  • 描述:最大线程池的大小,即线程池中允许的最大线程数量。
  • 作用:限制线程池可以创建的最大线程数量,以防止在高负载下系统资源耗尽。

3. keepAliveTime

  • 描述:线程保持空闲的时间,即当线程池中的线程数量超过 corePoolSize 时,多余的线程在等待新任务到来时的最长时间。如果等待时间超过此值,多余的线程将被终止。
  • 作用:允许动态调整线程池中的线程数量,释放资源。

4. unit

  • 描述keepAliveTime 参数的时间单位。一般是 TimeUnit 枚举类型中的一种,如 TimeUnit.SECONDSTimeUnit.MILLISECONDS 等。
  • 作用:指定 keepAliveTime 的时间单位。

5. workQueue

  • 描述:任务队列,用于保存待执行的任务。可以是各种类型的阻塞队列,如 ArrayBlockingQueueLinkedBlockingQueueSynchronousQueue 等。
  • 作用:管理和存储待执行的任务。

6. threadFactory

  • 描述:线程工厂,用于创建新线程。默认使用 Executors.defaultThreadFactory(),可以自定义实现以设置其他参数,如线程名称、优先级等。
  • 作用:提供创建新线程的逻辑,允许自定义线程属性。

7. handler

  • 描述:拒绝策略,当任务无法提交到线程池(例如,线程池已满或已关闭)时执行的处理方式。
  • 作用:定义任务被拒绝时的处理行为。内置的拒绝策略包括:
    • AbortPolicy(默认):抛出 RejectedExecutionException
    • CallerRunsPolicy:由调用者线程处理该任务。
    • DiscardPolicy:抛弃当前任务。
    • DiscardOldestPolicy:抛弃队列中最老的任务,然后重新提交当前任务。

示例代码

以下是一个创建和配置 ThreadPoolExecutor 的简单示例:

import java.util.concurrent.*;public class ThreadPoolExecutorExample {public static void main(String[] args) {// 核心参数配置int corePoolSize = 2;int maximumPoolSize = 4;long keepAliveTime = 10;TimeUnit unit = TimeUnit.SECONDS;BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(2);ThreadFactory threadFactory = Executors.defaultThreadFactory();RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();// 创建线程池ExecutorService threadPool = new ThreadPoolExecutor(corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue,threadFactory,handler);// 提交任务for (int i = 0; i < 10; i++) {final int taskNumber = i;threadPool.submit(() -> {try {System.out.println("Task " + taskNumber + " is running by " + Thread.currentThread().getName());Thread.sleep(2000);System.out.println("Task " + taskNumber + " is completed by " + Thread.currentThread().getName());} catch (InterruptedException e) {Thread.currentThread().interrupt();}});}// 关闭线程池threadPool.shutdown();try {if (!threadPool.awaitTermination(60, TimeUnit.SECONDS)) {threadPool.shutdownNow();}} catch (InterruptedException ex) {threadPool.shutdownNow();Thread.currentThread().interrupt();}}
}

总结

ThreadPoolExecutor 提供了丰富的配置参数,可以用于精细地控制线程池的行为。这些参数能够帮助创建高效、稳定的线程池,适应各种不同的并发场景。理解并正确配置这些参数,有助于在实际应用中更好地利用线程池的优势,提高系统性能。

http://www.lryc.cn/news/448231.html

相关文章:

  • 关于工作虚拟组的一些思考
  • 【Redis入门到精通六】在Spring Boot中集成Redis(含配置和操作演示)
  • 【CSS】透明度 、过渡 、动画 、渐变
  • 尚硅谷vue3+TypeScript笔记大全
  • New major version of npm available! 8.3.1 -> 10.8.3 报错
  • Python(七)- 文件操作
  • Docker技术深度解析与实践案例
  • llama_deploy
  • 平衡二叉搜索树插入的实现
  • ROS理论与实践学习笔记——2 ROS通信机制之通信机制实践
  • CDGA|数据治理:策略与价值的深度融合
  • 49. 建模软件绘制3D场景(Blender)
  • 如何使用 DomCrawler 进行复杂的网页数据抓取?
  • 维修服务品牌小程序渠道客获
  • 【全新课程】正点原子《基于GD32 ARM32单片机项目实战入门》培训课程上线!
  • Kafka系列之:安装使用kafka_exporter详细步骤
  • Paddlets时间序列集成模型回测实战:MLPRegressor、NHiTSModel与RNNBlockRegressor
  • 【anki】显示 “连接超时,请更换网络后重试” 怎么办
  • 第一批学习大模型的程序员,已经碾压同事了,薪资差距都甩出一条街了...
  • Unity NetCode 客户端连接不上服务器,局域网模式 Failed to connect to server.
  • C++远端开发环境安装(centos7)
  • LaTeX 编辑器-TeXstudio
  • [深度学习]循环神经网络
  • 景联文科技精准数据标注:优化智能标注平台,打造智能未来
  • 商场促销——策略模式
  • 万字长文,AIGC算法工程师的面试秘籍,推荐收藏!
  • 一些超好用的 GitHub 插件和技巧
  • 记Flink SQL 将数据写入 MySQL时的一个优化策略
  • QT-自定义信号和槽对象树图形化开发计算器
  • C# 字符串(String)的应用说明一