线程池

简介: 线程池通过复用线程提升性能,避免频繁创建销毁的开销。它简化多线程管理,支持任务提交、周期执行与调度,核心在于高效利用资源,减少线程切换。使用时只需创建、提交任务并适时关闭。

一、线程池初探

所谓线程池,就是将多个线程放在一个池子里面(所谓池化技术),然后需要线程的时候不是创建一个线程,而是从线程池里面获取一个可用的线程,然后执行我们的任务。线程池的关键在于它为我们管理了多个线程,我们不需要关心如何创建线程,我们只需要关系我们的核心业务,然后需要线程来执行任务的时候从线程池中获取线程。任务执行完之后线程不会被销毁,而是会被重新放到池子里面,等待机会去执行任务。

我们为什么需要线程池呢?首先一点是线程池为我们提高了一种简易的多线程编程方案,我们不需要投入太多的精力去管理多个线程,线程池会自动帮我们管理好,它知道什么时候该做什么事情,我们只要在需要的时候去获取就可以了。其次,我们使用线程池很大程度上归咎于创建和销毁线程的代价是非常昂贵的,甚至我们创建和销毁线程的资源要比我们实际执行的任务所花费的时间还要长,这显然是不科学也是不合理的,而且如果没有一个合理的管理者,可能会出现创建了过多的线程的情况,也就是在JVM中存活的线程过多,而存活着的线程也是需要销毁资源的,另外一点,过多的线程可能会造成线程过度切换的尴尬境地。

对线程池有了一个初步的认识之后,我们来看看如何使用线程池。

  1. 创建一个线程池


ExecutorService executorService = Executors.newFixedThreadPool(1);
  1. 提交任务


executorService.submit(() -> System.out.println("run"));
Future<String> 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();


可以发现使用线程池非常简单,只需要极少的代码就可以创建出我们需要的线程池,然后将我们的任务提交到线程池中去。我们只需要在结束之时记得关闭线程池就可以了。本文的重点并非在于如何使用线程池,而是试图剖析线程池的实现,比如一个调度线程池是怎么实现的?是靠什么实现的?为什么能这样实现等等问题。


相关文章
|
Unix Linux
gzip/gunzip命令
`gzip` 和 `gunzip` 是 Linux/Unix 的压缩工具,用于压缩(`.gz`)和解压缩文件。`gzip` 使用 LZ77 和 Huffman 编码,支持递归压缩目录、设置压缩级别及保留源文件等选项。例如:`gzip file` 压缩文件,`gzip -d` 或 `gunzip` 解压缩。用户常通过调整选项完成所需操作,如`gzip -k`压缩后保留原文件。
508 4
|
5月前
|
SQL 前端开发 测试技术
如何写好一篇技术方案(精简版)
一份好的技术方案是推动项目落地、对齐认知、降低协作成本的关键。应包含变更记录、背景、功能模块、流程图、接口设计等十大结构,遵循图文结合、聚焦可执行、简洁明了的原则,800–1500字为宜,重在指导行动而非堆砌文字。
|
5月前
|
运维 监控 安全
为什么禁止使用 Executors 创建线程池?
Java并发中,`Executors`快捷方法易导致OOM或系统雪崩,因隐藏关键配置。阿里手册禁止其在生产使用。应显式创建`ThreadPoolExecutor`,设定核心参数与有界队列,结合Guava命名线程,提升系统稳定性与可维护性。
|
5月前
|
Java
ArrayList 的扩容机制解析
ArrayList扩容机制解析:添加元素时先检查容量,不足则触发扩容。默认初始容量为10,每次扩容1.5倍,通过数组拷贝实现,耗时O(n)。频繁扩容影响性能,建议预估容量并初始化指定大小,提升效率。
|
5月前
|
SQL 监控 安全
生产环境发布管理:从开发到上线的全链路保障
本文详解大型互联网团队的四环境发布体系(DEV→TEST→PRE→PROD),阐述如何通过标准化流程与自动化平台实现安全、高效、可追溯的生产发布,涵盖环境职责、CI/CD核心能力及风险应对策略,助力团队实现快速迭代与零重大故障。
|
7月前
|
人工智能 Kubernetes 调度
ModelDistribution:高效的大模型管理、分发和预热方案
阿里云ACK One舰队推出ModelDistribution方案,创新性采用OCI标准封装模型,实现跨地域高效分发与预热,解决大模型部署中的管理复杂、拉取慢、多集群同步难等痛点,助力企业平滑演进至多地域AI推理架构。
484 1
ModelDistribution:高效的大模型管理、分发和预热方案
|
4月前
|
存储 弹性计算 人工智能
2026年阿里云服务器最新价格表及优惠详情参考
租用阿里云服务器一年要花多少钱?2026年阿里云最新价格表,2026年阿里云服务器最新价格表及优惠详情参考
723 0
|
7月前
|
机器学习/深度学习 人工智能 UED
生成式AI:从理解世界到创造世界
生成式AI:从理解世界到创造世界
363 33
|
12月前
|
缓存 开发框架 .NET
一个功能丰富的 .NET 工具库 XiHan.Framework.Utils
XiHan.Framework.Utils 是一个功能全面的 .NET 工具库,包含字符串处理、集合扩展、加密解密、分布式 ID、文件操作、缓存、线程、国际化等模块。设计上注重高内聚、低耦合,适用于各类 .NET 应用开发。支持 AES 加密、树形结构转换、分页过滤、日志输出等功能,提供简单易用的 API。可通过 NuGet 快速安装,源码开放,采用 MIT 协议。
409 56
|
人工智能 算法 数据处理
算法为舟 思想为楫:AI时代,创作何为?
本文探讨了AI时代创作领域的变革与挑战,分析了人类创作者的独特价值,并展望了未来创作的新图景。随着生成式AI技术的发展,创作的传统认知被颠覆,评价体系面临革新。然而,人类创作者凭借批判性思维、情感智能、创意直觉和伦理自觉,依然具有不可替代的价值。文章呼吁创作者转变思维,从竞争走向合作,提升复合能力,关注作品的社会影响,并持续学习进化。在AI助力下,创作将更加民主化、多样化,推动文明进步。最终,人机协同或将成为未来创作的核心模式,共同开创文化发展的新纪元。