线程池初探

简介: 线程池通过复用线程提升性能,避免频繁创建销毁的开销。它统一管理线程,减少资源消耗与上下文切换,简化多线程编程。使用时只需提交任务,无需关注线程生命周期,支持定时、周期性任务调度,是高效稳定的并发编程工具。(238字)

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

  1. 创建一个线程池

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();

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

相关文章
|
SQL 开发框架 关系型数据库
16个值得推荐的.NET ORM框架
16个值得推荐的.NET ORM框架
1021 1
|
SQL 关系型数据库 Go
RDS SQL Server - 最佳实践 - 高CPU使用率系列之数据类型转换
# 摘要 前两篇文章讨论了导致CPU高使用率的两个重要原因是索引缺失和索引碎片,本系列文章之三讨论数据类型隐式转换话题。 # 场景分析 在SQL Server中,比较运算符(大于、小于、等于或者连接)两端的数据类型需要保持一直才能进行。否则,SQL Server会按照数据类型优先级由低到高进行隐式转化,然后再进行比较。这个行为可以通过执行计划中的CONVERT_IMPLICIT关键字看出来,
6129 0
|
消息中间件 物联网 网络性能优化
MQTT常见问题之mqtt 连接一直显示 Not authorized to connect如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
存储 监控 数据安全/隐私保护
数据备份策略有哪些?
【6月更文挑战第19天】数据备份策略有哪些?数据备份策略有哪些?
2240 6
|
安全 Linux Shell
操作系统究竟是什么?在计算机体系中扮演什么角色?
操作系统究竟是什么?在计算机体系中扮演什么角色?
847 0
|
传感器 物联网 Android开发
【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)
【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)
914 1
|
7月前
|
人工智能 缓存 自然语言处理
AI网关可能是当下降低推理成本最经济的工程手段
网关成大模型降本关键:无需修改代码,即可节省达 70% 推理开销。
519 4
|
SQL 分布式计算 数据处理
如何充分发挥 SQL 能力?
如何充分发挥 SQL 能力,是本篇文章的主题。本文尝试独辟蹊径,强调通过灵活的、发散性的数据处理思维,就可以用最基础的语法,解决复杂的数据场景。
158555 59
|
存储 Linux
Linux命令`df`详解
`df`命令在Linux中用于显示磁盘空间使用情况。基本用法是`df`,显示所有挂载点的磁盘空间;`-h`提供人性化尺寸(GB, MB);`-T`显示文件系统类型;`-i`显示inode信息;`-a`包括所有文件系统;`-t TYPE`和`-x TYPE`筛选特定类型文件系统;`--output=FIELD_LIST`选择显示字段;`-l`仅显示本地文件系统。学习这些选项有助于有效管理磁盘空间。
|
存储 人工智能 自然语言处理
那些难装的 Stable Diffusion 插件(Deforum\roop\adetailer)终于内置了!
我们收集了很多同学需要的插件,这一次把比较难装的 Stable Diffusion 插件都装好了。可以根据自己的需要自行勾选。
6748 5

热门文章

最新文章