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

Java 创建线程池的几种方式

在 Java 中创建线程池主要通过 java.util.concurrent 包下的 ExecutorService 接口及其实现类。以下是创建线程池的几种常见方式:


✅ 1. 使用 Executors 工具类(最简单)

ExecutorService executor = Executors.newFixedThreadPool(10);
常用方法说明:
方法描述
Executors.newFixedThreadPool(int nThreads)固定大小线程池,适合负载稳定场景
Executors.newSingleThreadExecutor()单线程池,串行执行任务
Executors.newCachedThreadPool()缓存线程池,线程可复用,适合执行大量短期异步任务
Executors.newScheduledThreadPool(int corePoolSize)支持定时与周期性任务调度的线程池

⚠️ 缺点Executors 默认线程池队列大小是无界的,可能导致 OOM,不推荐在生产中直接使用。


✅ 2. 使用 ThreadPoolExecutor 构造函数(推荐)

ExecutorService executor = new ThreadPoolExecutor(4,                      // corePoolSize10,                     // maximumPoolSize60,                     // keepAliveTimeTimeUnit.SECONDS,       // keepAliveTime 单位new LinkedBlockingQueue<>(100),  // 工作队列Executors.defaultThreadFactory(), // 线程工厂new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
);
参数详解:
  • corePoolSize:核心线程数

  • maximumPoolSize:最大线程数

  • keepAliveTime:非核心线程最大空闲时间

  • workQueue:任务队列(如 LinkedBlockingQueueArrayBlockingQueue

  • threadFactory:自定义线程工厂

  • handler:任务拒绝策略(如下所示)

常见拒绝策略:
策略类描述
AbortPolicy默认策略,抛出异常
CallerRunsPolicy谁提交谁执行
DiscardPolicy直接丢弃任务
DiscardOldestPolicy丢弃队列头部任务,尝试再次执行当前任务

✅ 3. 使用 ScheduledExecutorService(定时/周期任务)

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(3);scheduler.schedule(() -> {System.out.println("延迟3秒执行");
}, 3, TimeUnit.SECONDS);scheduler.scheduleAtFixedRate(() -> {System.out.println("每5秒执行一次");
}, 1, 5, TimeUnit.SECONDS);

✅ 4. 使用 Spring 提供的 ThreadPoolTaskExecutor(在 Spring Boot 中)

@Configuration
public class ThreadPoolConfig {@Beanpublic ThreadPoolTaskExecutor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(50);executor.setKeepAliveSeconds(60);executor.setThreadNamePrefix(\"MyExecutor-\");executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());return executor;}
}

🔚 总结推荐

需求推荐方式
简单临时使用Executors.newFixedThreadPool
可控、适合生产自定义 ThreadPoolExecutor
定时任务调度ScheduledExecutorService
Spring 项目中ThreadPoolTaskExecutor

如果你希望我为你封装一份线程池模板代码(带监控、日志、自定义命名、注释),也可以告诉我,我来写。

Java 创建线程池的几种方式 – 菜鸟-创作你的创作

http://www.lqws.cn/news/139681.html

相关文章:

  • .net jwt实现
  • Linux-linux和windows创建新进程的区别以及posix_spawn
  • ROS 2 环境下使用 Astra Pro 深度相机实现目标距离检测及远程可视化全流程总结
  • 卫星的“太空陀螺”:反作用轮如何精准控制姿态?
  • JavaWeb:前端工程化-ElementPlus
  • Python应用函数的定义与调用(一)
  • 嵌入式分析利器:DuckDB与SqlSugar实战
  • 前端组件推荐 Swiper 轮播与 Lightbox 灯箱组件深度解析
  • 半导体制冷片(Thermoelectric Cooler,TEC)
  • vue封装gsap自定义动画指令
  • JAVA容器
  • BERT vs Rasa 如何选择 Hugging Face 与 Rasa 的区别 模型和智能体的区别
  • 【拓扑】1639.拓扑排序
  • 六种高阶微分方程的特解(原创:daode3056)
  • 近端策略优化(PPO,Proximal Policy Optimization)
  • JavaScript 深入探索:高级应用与前沿技术
  • Java异步编程难题拆解技术
  • MySQL范式和反范式
  • 在 Windows 系统下配置 VSCode + CMake + Ninja 进行 C++ 或 Qt 开发
  • 【力扣】3403. 从盒子中找出字典序最大的字符串 I
  • Java 2D 图形变换方法
  • AI全链路赋能内容创作:电商新势力起飞
  • 让视觉基础模型(VFMs)像大语言模型(LLMs)一样“会思考”​
  • 第八部分:第六节 - 状态管理 (基础):协调多个界面的状态
  • 【Unity】R3 CSharp 响应式编程 - 使用篇(二)
  • 【HW系列】—内网被渗透的解决方案
  • 协议融合驱动效能跃升:Modbus转Ethernet IP的挤出吹塑机应用
  • 修改 Windows 10/11 的系统设置中显示的安装日期
  • 如何解决spring循环依赖
  • 还原Windows防火墙