线程池初探

简介: 线程池初探

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

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

相关文章
|
人工智能 监控 网络协议
【网络技术】心跳机制(入门讲解)
【网络技术】心跳机制(入门讲解)
|
JSON 前端开发 Java
Springboot中整合knife4j接口文档
Springboot中整合knife4j接口文档
1718 0
|
IDE Java 编译器
java: 错误: 不支持发行版本 5 java: 错误: 不支持发行版本8 java: 错误: 不支持发行版本17
检查编译器配置:确保你的IDE或编译器已正确配置为使用正确的Java版本。可以在IDE的设置或项目属性中查找并更改Java编译器的版本。
1768 0
|
Kubernetes Docker 容器
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
701 25
|
存储 运维 监控
云时代,好用的数据迁移方案推荐
本文将介绍数据库迁移的步骤以及市面上常见的迁移工具,推荐大家选择能够支持“业务零停机迁移”的工具产品。同时,平台工具(例NineData) 的自动化体验及配套设施(例:数据校验工具、迁移限流、监控告警等)一般较为完善,是比较推荐的选择。
1761 1
云时代,好用的数据迁移方案推荐
|
数据采集 搜索推荐 API
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
|
弹性计算 运维 Cloud Native
XGRIDS三维重建服务,构建云上数字孪生世界
基于阿里云建设三维重建云平台,搭建云端仿真资源池
XGRIDS三维重建服务,构建云上数字孪生世界
|
存储 机器学习/深度学习 缓存
ModelScope 模型库产品快速使用
ModelScope 的模型库(Model Hub)是共享机器学习模型、demo 演示、数据集和数据指标的地方。可以轻松地创建和管理自己的模型库,利用界面或开发环境来便捷地上传、下载相关模型文件,并从 Model Hub 中获取有用的模型和数据集元数据。
34779 1
|
安全 网络安全 量子技术
探索未来网络安全的关键:量子加密技术
本文深入探讨了量子加密技术,一项被视为未来网络安全领域的重要突破。通过详细分析量子加密的工作原理、优势以及当前面临的挑战和潜在解决方案,文章为读者提供了对这一前沿技术的全面理解。我们将探讨如何将量子加密技术与现有网络安全架构融合,以及它在未来数字世界中的潜在应用。
1184 2
|
消息中间件 Java Kafka
探索Java中的事件驱动架构(EDA)
探索Java中的事件驱动架构(EDA)