线程池

简介: 线程池通过复用线程提升性能,避免频繁创建销毁的开销。Java中由Executors工厂类创建,核心为ThreadPoolExecutor,配合ExecutorService管理任务,ScheduledThreadPoolExecutor支持定时调度,实现高效并发控制。

一、线程池初探
所谓线程池,就是将多个线程放在一个池子里面(所谓池化技术),然后需要线程的时候不是创建一个线程,而是从线程池里面获取一个可用的线程,然后执行我们的任务。线程池的关键在于它为我们管理了多个线程,我们不需要关心如何创建线程,我们只需要关系我们的核心业务,然后需要线程来执行任务的时候从线程池中获取线程。任务执行完之后线程不会被销毁,而是会被重新放到池子里面,等待机会去执行任务。
我们为什么需要线程池呢?首先一点是线程池为我们提高了一种简易的多线程编程方案,我们不需要投入太多的精力去管理多个线程,线程池会自动帮我们管理好,它知道什么时候该做什么事情,我们只要在需要的时候去获取就可以了。其次,我们使用线程池很大程度上归咎于创建和销毁线程的代价是非常昂贵的,甚至我们创建和销毁线程的资源要比我们实际执行的任务所花费的时间还要长,这显然是不科学也是不合理的,而且如果没有一个合理的管理者,可能会出现创建了过多的线程的情况,也就是在JVM中存活的线程过多,而存活着的线程也是需要销毁资源的,另外一点,过多的线程可能会造成线程过度切换的尴尬境地。
对线程池有了一个初步的认识之后,我们来看看如何使用线程池。
创建一个线程池ExecutorService executorService = Executors.newFixedThreadPool(1);

  1. 提交任务

executorService.submit(() -> System.out.println("run"));
Future stringFuture = executorService.submit(() -> "run");

  1. 创建一个调度线程池

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);

  1. 提交一个周期性执行的任务

scheduledExecutorService
.scheduleAtFixedRate(() -> System.out.println("schedule"), 0, 1, TimeUnit.SECONDS);

  1. shutdown

executorService.shutdownNow();
scheduledExecutorService.shutdownNow();

可以发现使用线程池非常简单,只需要极少的代码就可以创建出我们需要的线程池,然后将我们的任务提交到线程池中去。我们只需要在结束之时记得关闭线程池就可以了。本文的重点并非在于如何使用线程池,而是试图剖析线程池的实现,比如一个调度线程池是怎么实现的?是靠什么实现的?为什么能这样实现等等问题。
二、Java线程池实现架构
Java中与线程池相关的类有下面一些:
● Executor
● ExecutorService
● ScheduledExecutorService
● ThreadPoolExecutor
● ScheduledThreadPoolExecutor
● Executors
通过上面一节中的使用示例,可以发现Executors类是一个创建线程池的有用的类,事实上,Executors类的角色也就是创建线程池,它是一个工厂类,可以产生不同类型的线程池,而Executor是线程池的鼻祖类,它有两个子类是ExecutorService和ScheduledExecutorService,而ThreadPoolExecutor和ScheduledThreadPoolExecutor则是真正的线程池,我们的任务将被这两个类交由其所管理者的线程池运行,可以发现,ScheduledThreadPoolExecutor是一个集大成者类,

相关文章
|
14小时前
|
Devops 测试技术 开发者
为什么要单元测试
单元测试看似“踩刹车”,实则让开发跑得更快。它快速、稳定、精准定位问题,提升代码质量与可维护性,支撑高效迭代,是软件工程不可或缺的地基。
|
9天前
|
存储 缓存 NoSQL
即将开源 | 阿里云 Tair KVCache Manager:企业级全局 KVCache 管理服务的架构设计与实现
阿里云 Tair 联合团队推出企业级全局 KVCache 管理服务 Tair KVCache Manager,通过中心化元数据管理与多后端存储池化,实现 KVCache 的跨实例共享与智能调度。该服务解耦算力与存储,支持弹性伸缩、多租户隔离及高可用保障,显著提升缓存命中率与资源利用率,重构大模型推理成本模型,支撑智能体时代的规模化推理需求。
|
10天前
|
监控 安全 Unix
iOS 崩溃排查不再靠猜!这份分层捕获指南请收好
从 Mach 内核异常到 NSException,从堆栈遍历到僵尸对象检测,阿里云 RUM iOS SDK 基于 KSCrash 构建了一套完整、异步安全、生产可用的崩溃捕获体系,让每一个线上崩溃都能被精准定位。
166 28
|
9天前
|
数据采集 人工智能 运维
AgentRun 实战:快速构建 AI 舆情实时分析专家
搭建“舆情分析专家”,函数计算 AgentRun 快速实现从数据采集到报告生成全自动化 Agent。
321 21
|
15小时前
|
存储 弹性计算 人工智能
阿里云服务器租用费用价格表(2026年最新)一年、1个月和1小时收费
2026年阿里云服务器最新价格出炉,涵盖轻量应用服务器、ECS、GPU服务器等多种类型。38元/年起秒杀轻量服务器,99元/年畅享2核2G配置,按月、按小时灵活计费,支持个人开发、企业建站及AI计算全场景需求,高性价比优选。
|
15小时前
|
存储 弹性计算 人工智能
租用云服务器多少钱一个月?2026年阿里云服务器租用月付价格说明
租阿里云服务器的月费受实例类型、配置、地域等因素影响,从 25 元到数千元不等,覆盖个人开发、中小企业业务到高性能计算等全场景。以下结合 2026 年最新价格信息,梳理轻量应用服务器、ECS 云服务器及 GPU 服务器的核心配置与月费,帮助用户根据需求精准选择,避免成本浪费。
|
12小时前
|
IDE 编译器 开发工具
【2026最新】Dev C++下载安装使用全流程教程(附最新版安装包+图文步骤)
Dev C++ 是一款轻量免费的 Windows C/C++ 集成开发环境,内置 MinGW 编译器,支持 C++11 等标准。安装简便、启动快速,适合新手学习、竞赛与算法训练,是入门 C/C++ 的理想工具。

热门文章

最新文章