【Java】线程池技术(一)Executor框架

背景

Java 底层提供了 Thread 类支持开发人员手动创建线程执行任务,但是这种操作会存在以下问题:

  • 每次都要重新创造和回收 Thread 对象,性能较差。如果并发线程数较大,且任务执行时间较短,频繁创建和回收线程对象会大大降低系统的效率
  • 线程缺乏统一管理,不同业务之间可能会无限制的创建线程,相互之间竞争资源,容易导致系统资源占用过多,从而引起 OOM 或程序奔溃
  • 功能比较单一,缺乏其他通用能力

在这样的背景下,结合池化思想,则可以通过线程池来优化设计。具体的优势在于:

  • 通过重复利用已创建的线程,避免因频繁创建和回收线程对象而对系统造成的资源开销
  • 提高任务响应速度,当任务到达后,可以立即使用已创建的线程执行任务
  • 统一管理线程的分配、调度和监控,可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞

使用线程池时场景,一般满足以下特征:

  • 单个任务的处理时间比较短
  • 需要处理的任务数量特别大

Executor 框架

Executor 是 Java 中一个经典的多线程任务管理框架,其主要提供了任务、任务执行线程池、任务执行结果三个组件,每个组件的具体定义与含义如下:

组件含义
任务Executor 框架提供了 Runnable 接口和 Callable 接口,任务需要实现这两个接口才能被线程执行
任务执行线程池Executor 框架提供了接口 Executor 和继承于 ExecutorExecutorService 接口来定义任务执行机制。Executor 框架中的线程池类 ThreadPoolExecutor 和 ScheduledThreadPoolExecutor 均实现了ExecutorService 接口
任务执行结果Executor 框架提供了 Future 接口和实现了 Future 接口的 FutureTask 类来定义任务执行结果。调用 ExecutorServicesubmit() 方法后会返回一个 Future 对象。

基本流程

  1. 主线程创建实现了 Runnable 或者 Callable 接口的任务对象;
  2. 把创建完成的 Runnable 对象或者 Callable 对象提交给 ExecutorService 执行 execute() 或者 submit() 方法;
  3. 如果执行的是 submit() 方法,则 ExecutorService 会返回一个实现了 Future 接口的对象;
  4. 最后主线程可以执行 Future 接口对象的 get() 方法来等待任务执行完成,也可以执行 cancel() 方法来取消任务的执行,通过参数 boolean mayInterruptIfRunning 来控制是否中断正在执行中的任务。

设计思想

  • 顶层接口 Executor 提供了一种思想:将任务提交和任务执行进行解耦。用户无需关注如何创建线程,如何调度线程来执行任务,用户只需提供 Runnable 对象,将任务的运行逻辑提交到执行器 Executor 中,由 Executor 框架完成线程的调配和任务的执行部分。
  • ExecutorService 接口增加了一些能力:
    • 扩充执行任务的能力,补充可以为一个或一批异步任务生成 Future 的方法;
    • 提供了管控线程池的方法,比如停止线程池的运行。
  • AbstractExecutorService 则是上层的抽象类,将执行任务的流程串联了起来,保证下层的实现只需关注一个执行任务的方法即可。
  • 最下层的实现类 ThreadPoolExecutor 实现最复杂的运行部分,一方面维护自身的生命周期,另一方面同时管理线程和任务,使两者良好的结合从而执行并行任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁TikTok内容趋势——高效获取TikTok标签信息接口

一、引言 在TikTok这个全球热门的短视频平台上,标签(Hashtags)是用户和内容创作者连接、发现新内容的重要工具。为了帮助品牌、市场分析师、内容创作者等更好地理解和利用TikTok上的内容趋势,我们推出了一款全新的接口服务&#…

PD19 Parallels Desktop 虚拟机 安装Windows10系统 操作步骤(保姆级教程,轻松上手)

Mac分享吧 文章目录 效果一、准备工作**下载软件** 二、开始安装1、打开pd 19 虚拟机,点击右上角文件,新建2、通过下载好的镜像安装Windows10系统。找到镜像文件位置,安装,配置2、显示安装完成,打开Windows10系统 三、…

单链表的合并

分数 5 作者 李卫明 单位 杭州电子科技大学 1.2 编写程序,在第1题(第1题:编写程序,建立2个带头结点单链表,输入若干整数将正整数插入第1个单链表,将负整数插入第2个单链表,插入前和插入后单链表保持递增…

UI设计速成课:理解模态窗口与非模态窗口的区别

我们日常所说的弹性框架是非常笼统的概念。我们习惯性地称之为对话框架、浮动层和提示条。弹性框架可以分为两种:模态弹性框架和非模态弹性框架。产品需要弹性框架来传递信息,用户需要弹性框架来接受反馈,但是没有经过推敲的弹出窗口设计很容易让用户感到…

最新版首发 | 手把手教你安装 Vivado2024.1(附安装包)

Q:Vivado出2024版了!不知迪普微有没有对应的安装包呢? A:有的!回复“Vivado2024.1”即可获得相应安装包哦~ Q:好哒~但是我不会安装,可否安排一期安装教程? A:立马安排&…

Gin 详解

Gin 介绍 gin框架是一个基于go语言的轻量级web框架,它具有高效性、灵活性、易扩展性路由 gin框架使用的是定制版的httprouter 其路由原理是大量使用公共前缀的树结构,注册路由的过程就是构造前缀树的过程。 具有公共前缀的节点也共享一个公共父节点。…

怎么移除pdf文件编辑限制,有哪些方法?

PDF是我们在学习或工作中常常应用到的一种文件格式,因为它的跨平台性和文档保真度而备受欢迎。但是,有时我们会遇到PDF编辑权限被限制了,那么pdf解除编辑限制可以用什么方法呢?别急,接下来,本文将深入探讨如…

关于Panabit在资产平台中类型划分问题

现场同事问了一个问题:Panabit能不能当做CentOS接入? 我第一反应是:Panabit是个什么鬼?为啥要混编接入?后期维护都是事啊。所以,我就想回答:不能! 但是,最好要给出一个…

通过sql语句直接导出excel文件

SELECT column1 as 名字 FROM your_table INTO OUTFILE /path/to/your_file.csv FIELDS TERMINATED BY , ENCLOSED BY " LINES TERMINATED BY \n 这里的注意事项是,INTO OUTFILE 这后面的路径需要通过下面的SQL查出来 show variables like %secure%; 操作步骤…

构建多模态模型,生成主机观测指标,欢迎来战丨2024天池云原生编程挑战赛

在当前云计算和微服务架构日益普及的背景下,企业和开发者对云资源的依赖日益加深。Elastic Compute Service(ECS)作为提供计算能力的核心服务,承担着众多的业务。随着微服务架构的广泛应用,任务的部署和执行变得更为灵…

AWS亚马逊云必须要实名吗?

AWS需要实名验证吗?为什么?对于这些问题有不少人存在疑惑,现由aws的合作伙伴九河云进行讲解: 在注册AWS账户时,需要提供基本信息,包括电子邮件地址、密码和账户名称,并确保密码复杂度足够强以保…

mysql密码过期的修改(Your password has expired. ..)

参考文章:mysql密码过期的修改方法(your password has expired)_我是知青-RuoYi 若依 (csdn.net) 问题:Your password has expired. To log inyou must change it using a clientthat supports expired passwords. 解决方式&…

无线领夹麦克风哪个牌子好用?一文揭秘哪种领夹麦性价比最高!

​无线领夹麦克风,无疑是现代音频技术的杰出代表。它摆脱了传统有线麦克风的束缚,让声音的传播更加自由、灵活。无论是追求极致音质的音乐爱好者,还是需要高效沟通的商务人士,无线领夹麦克风都能满足你的需求,让你的声…

在面试中展示自己的系统架构设计能力

在面试中展示自己的系统架构设计能力是一个关键过程,以下是一些建议,帮助你充分展示你的专业能力和经验: 1. 准备充分的项目案例: 挑选一两个你最为熟悉和自豪的项目案例,并事先准备好详细的介绍和说明。突出在这些项目中你如何运用架构设计原则和技术,解决了哪些挑战,…

人的酒量到底有多大,多长时间可以练到千杯不醉?

人的酒量是指一个人能够消耗多少酒精而不至于出现明显的不适或醉酒现象,它受到多种因素的影响。下面将详细解释决定酒量的主要因素: 遗传因素:遗传在决定一个人的酒量上扮演了重要角色。研究表明某些基因变异,如酒精脱氢酶和乙醛…

Kantana和The Sandbox联手打造元宇宙娱乐的未来

The Sandbox 是一个开创性的元宇宙、游戏和创作平台,泰国领先的娱乐公司 Kantana 很高兴地宣布双方将建立合作关系,共同打造元宇宙娱乐的未来。 此次合作结合了 Kantana 引以为傲的故事讲述专长和The Sandbox 的用户生成内容 (UGC) 工具,创建…

Shardingsphere-Proxy 5.5.0部署

Shardingsphere-Proxy 5.5.0部署 Shardingsphere系列目录:背景下载安装包Linux解压安装包修改配置文件global.yamldatabase-sharding.yaml 引入数据库驱动启动代理连接代理数据库Navicate工具连接MYSQL客户端连接 Shardingsphere系列目录: 【Springboot…

分布式系统之衡量指标:性能、资源、可用性和可扩展性

分布式系统的重要指标:性能、资源、可用性和可扩展性 在设计和评估分布式系统时,性能、资源占用、可用性和可扩展性是四个关键的指标。这些指标帮助我们理解系统在不同条件下的表现,并指导我们进行优化和改进。以下是对这些指标的详细描述和分…

山东大学软件学院创新项目实训开发日志——收尾篇

山东大学软件学院创新项目实训开发日志——收尾篇 项目名称:ModuFusion Visionary:实现跨模态文本与视觉的相关推荐 -------项目目标: 本项目旨在开发一款跨模态交互式应用,用户可以上传图片或视频,并使用文本、点、…

ardupilot开发 --- RTSP视频流 篇

我年轻时很穷,努力了几年,终于不再年轻了 0. 一些概念参考文献 0. 一些概念 RTSP服务、RTSP推流、RTSP拉流,缺一不可,尤其是RTSP服务。RTSP服务器、RTSP客户端。推流和拉流都是由客户端发起,向服务器发起对应的请求。…