JUC线程池之线程池架构

news2025/1/20 16:21:50

JUC线程池之线程池架构

在多线程编程中,任务都是一些抽象且离散的工作单元,而线程 是使任务异步执行的基本机制。随着应用的扩张,线程和任务管理也 变得非常复杂。为了简化这些复杂的线程管理模式,我们需要一个 “管理者”来统一管理线程及任务分配,这就是线程池。

线程池的架构图大致如下:

在这里插入图片描述

Executor

​ Executor是Java异步目标任务的“执行者”接口,其目标是执行 目标任务。“执行者”Executor提供了execute()接口来执行已提交的 Runnable执行目标实例。Executor作为执行者的角色,其目的是提供 一种将“任务提交者”与“任务执行者”分离开来的机制。

只包含一个函数式方法:

void execute(Runnable command)
ExecutorService

​ 继承于Executor。他是Java异步目标任务的“执行者服务”接口,对外提供异步任务的接受服务。

提 供了“接收异步任务并转交给执行者”的方法,如:

//向线程池提交单个异步任务
<T> Future<T> submit(Callable<T> task);
//向线程池提交批量异步任务
<T> List<Future<T>> invokeAll(Collection<? extendsCallable<T>> tasks)throws InterruptedException;
AbstractExecutorService

​ AbstractExecutorService是一个抽象类,它实现了 ExecutorService接口。AbstractExecutorService存在的目的是为 ExecutorService中的接口提供默认实现。

ThreadPoolExecutor

​ ThreadPoolExecutor是JUC线程池的核心实现类,继承 于AbstractExecutorService抽象类。线程的创建和终 止需要很大的开销,线程池中预先提供了指定数量的可重用线程,所 以使用线程池会节省系统资源,并且每个线程池都维护了一些基础的 数据统计,方便线程的管理和监控。

ScheduledExecutorService

​ ScheduledExecutorService是一个接口,它继承于 ExecutorService。它是一个可以完成“延时”和“周期性”任务的调 度线程池接口,其功能和Timer/TimerTask类似。

ScheduledThreadPoolExecutor

​ ScheduledThreadPoolExecutor继承于ThreadPoolExecutor,它提 供了ScheduledExecutorService线程池接口中“延时执行”和“周期 执行”等抽象调度方法的具体实现。

​ ScheduledThreadPoolExecutor类似于Timer,但是在高并发程序 中,ScheduledThreadPoolExecutor的性能要优于Timer。

Executors

​ Executors是一个静态工厂类,它通过静态工厂方法返回 ExecutorService、ScheduledExecutorService等线程池示例对象,这 些静态工厂方法可以理解为一些快捷的创建线程池的方法。

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

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

相关文章

SOLIDWORKS Composer如何实现可视化产品交互

SOLIDWORKS Composer是一款让工程师和非工程人员都能够直接访问 3D CAD 模型、并为技术交流材料创建图形内容的 3D 软件。现如今很多制造型企业都已逐步实现其产品设计流程的自动化&#xff0c;以期比竞争对手更快进入市场。但遗憾的是在很多企业中&#xff0c;技术交流内容&am…

Android之修改Jar包源码后再重新打Jar包

一、找到jar包使用框架的github源码&#xff0c;并下载 例如&#xff1a;原有jar包 找到框架源码的github地址&#xff1a; https://github.com/eclipse/paho.mqtt.android 使用git拉取源码项目到本地 二、New Module — 选择Java or Kotlin Library新建 &#xff08;1&…

RabbitMQ安装教程

目录 Erlang官网 Erlang下载 RabbitMQ官网 windows RabbitMQ docker安装rabbitmq 最近入职新公司&#xff0c;要求会RabbitMQ&#xff0c;所以自学了一下&#xff0c;现将自学的结果总结如下&#xff1a; 安装RabbitMQ之前&#xff0c;需要先安装 Erlang,因为RabbitMQ使用…

【C++初阶】缺省参数与函数重载

一.缺省参数 C祖师爷在用C写代码的时候&#xff0c;就觉得有些地方用着很不方便&#xff0c;于是就在C设计了缺省参数&#xff0c;在实现一些功能时&#xff0c;用这个就方便了许多。 1.概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff1a…

强训之【井字棋和密码强度等级】

目录 1.井字棋1.1题目1.2思路讲解1.3代码展示 2.密码强度判断2.1题目2.2思路讲解2.3代码 3.选择题 1.井字棋 1.1题目 链接: link 描述 给定一个二维数组board&#xff0c;代表棋盘&#xff0c;其中元素为1的代表是当前玩家的棋子&#xff0c;0表示没有棋子&#xff0c;-1代表…

C/C++每日一练(20230419)

目录 1. 插入区间 2. 单词拆分 &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 插入区间 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表。 在列表中插入一个新的区间…

数据分析实战(二百零四):项目分析思路 —— 某线下连锁水果店销售数据分析

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 文章目录 一、问题确认与指标拆解&#xff1a;业务逻辑图 一、问题确认与指标拆解&#xff1a;业务逻辑图 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。

高精度(加法+减法+除法+乘法)合集

由于c/c语言特性&#xff0c;当数很大时&#xff0c;就要考虑精度问题&#xff0c;python和java则不用&#xff0c;因此c学会精度运算很重要的&#xff0c;这里作个总结 1.高精度加法 给定两个正整数&#xff08;不含前导 0&#xff09;&#xff0c;计算它们的和。 输入格式…

一定要会的算法复杂度分析

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 原作者&#xff1a;s09g|慕课网讲师 我们知道面对同一道问题时可能有多种解决方案。自然地&#xff0c;我们会将多种方法进行比较。那么…

【Linux】网络协议(应用层与传输层)

应用层传输层协议 应用层HTTP协议格式请求格式响应格式头部字段中的 Cookie (请求头) & Set-Cookie(响应头)cookiesession&#xff1a;会话cookie vs session HTTPS 协议&#xff1a;对 HTTP 协议进行加密 传输层UDP 协议TCP 协议 应用层 序列化&#xff1a;指将多个数组对…

使用shell封装Linux命令实现自定义Linux命令

前言 在日常工作中&#xff0c;尤其是在Linux上做开发的同学或者运维的同学们肯定会遇到过如下场景&#xff0c;比如在Linxu下通过find查找一个文件并且想看这个文件的详细信息&#xff0c;如果直接使用命令可能会一时想不起来&#xff0c;或者想起来了但是有个别参数忘记了。…

SpringMVC02注解与Rest风格

SpringMVC02 SpringMVC的注解 一、RequestParam 1、RequestParam注解介绍 位置&#xff1a;在方法入参位置作用&#xff1a;指定参数名称&#xff0c;将该请求参数 绑定到注解参数的位置属性 name&#xff1a;指定要绑定的请求参数名称&#xff1b; name属性和value属性互为…

vue-quill-editor富文本编辑框使用

vue富文本中实现上传图片及修改图片大小等功能。 1&#xff0c;配置使用 配置使用网上很多&#xff0c;记录下自己的使用过程 第一步&#xff1a;components/Editor文件夹下创建QuillEditor.vue文件 <template><div :class"prefixCls"><quill-edito…

bitset的用法

bitset的用法 bitset介绍 C的 bitset 在 bitset 头文件中&#xff0c;它是一种类似数组的结构&#xff0c;它的每一个元素只能是&#xff10;或&#xff11;&#xff0c;每个元素仅用&#xff11;bit空间&#xff0c;相当于一个char元素所占空间的八分之一。 bitset中的每个…

MyBatis-Plus Generator v3.5.1 最新代码自动生成器

一、概述 官网&#xff1a;https://baomidou.com/ 官方文档 &#xff1a;https://baomidou.com/pages/56bac0/ 官方源码地址&#xff1a; https://gitee.com/baomidou/mybatis-plus 官方原话&#xff1a; AutoGenerator 是 MyBatis-Plus 的代码生成器&#xff0c;通过 Auto…

【TMT数据传不到MES中间库】-F18

MES中间库有张表:T_Z_ERPSCInfo TMT机台落纱后,会把落纱的数据传到T_Z_ERPSCInfo去。 目前总是有几个机台(以F18举例),落纱了,数据没有过来。 起初以为是没有访问权限的问题,在机台上telnet ip+端口,发现没问题。 后来认为是数据库的账号有问题。 download了一份日…

Oracle EBS数据定义移植工具:FNDLOAD

在实际的EBS二次开发中&#xff0c;我们经常会碰到需要在各个环境之间移植二次开发的程序对象以及数据定义&#xff0c;如在EBS二次开发中并发请求的定义会涉及到&#xff1a; 可执行、并发程序、值集、请求组等的定义&#xff0c;定义需要从开发环境、测试环境、UAT环境一直到…

AI智慧工地视频分析系统 yolov7

AI智慧工地视频分析系统通过yolov7网络模型视频智能分析技术&#xff0c;AI智慧工地视频分析算法模型对画面中物的不安全状态以及现场施工作业人员的不合规行为及穿戴进行全天候不间断实时分析&#xff0c;发现有人不合规行为及违规穿戴抽烟打电话等立即自动抓拍存档告警。在架…

跨平台开发之 Tauri

比起 Electron&#xff0c;Tauri 打包后的安装包体积是真的小。 跨平台开发 最近使用跨平台开发框架写了一个软件&#xff0c;在此记录一下。 说起跨平台开发&#xff0c;我的理解是这样的&#xff1a; 多依赖浏览器环境运行多使用前端语言进行开发只需一次编码&#xff0c;…

JavaScript的this关键字

文章目录 一、JavaScript this 关键字总结 一、JavaScript this 关键字 面向对象语言中 this 表示当前对象的一个引用。 但在 JavaScript 中 this 不是固定不变的&#xff0c;它会随着执行环境的改变而改变。 在方法中&#xff0c;this 表示该方法所属的对象。 如果单独使用&a…