JUC线程池之线程池架构

news/2024/10/23 9:26:17/

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.ppmy.cn/news/45355.html

相关文章

golang web学习随便记1

直接上第一个例子代码 first_webapp/server.go package mainimport ("fmt""net/http" )func handler(writer http.ResponseWriter, request *http.Request) {fmt.Fprintf(writer, "hello world, %s!", request.URL.Path[1:]) }func main() {ht…

Ubuntu NVIDIA-Docker安装

Ubuntu NVIDIA-Docker安装 Docker简介NVIDIA驱动安装NVIDIA-Docker安装 系统环境&#xff1a; 系统&#xff1a;linux 版本&#xff1a;ubuntu20.04 Docker简介 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#…

rk3568 点亮LCD (BT656 BT1120)

rk3568 适配 BT656/BT1120 BT.656 TX 和 BT.1120 TX&#xff0c;是一种并行输出接口&#xff0c;而 Camera 对应的是 BT.656 RX和 BT.1120 RX&#xff0c;是一种并行输入接口&#xff0c;两则在协议上是一致的。与同为并口的RGB非常像&#xff0c;在rk3568 芯片上RGB和BT656/B…

Nacos共享配置

本文介绍一下Nacos作为配置中心时&#xff0c;如何读取共享配置 我的环境 Windows10JDK8SpringCloud&#xff1a;Finchley.RELEASESpringBoot&#xff1a;2.0.4.RELEASEspring-cloud-alibaba-dependencies&#xff1a;0.2.2.RELEASENacos-server&#xff1a;1.0.1 本文的项目…

C++类型转换运算符dynamic_cast、static_cast 和 reinterpret_cast

目录 区别对比 dynamic_cast&#xff1a; static_cast&#xff1a; reinterpret_cast&#xff1a; 案例说明 dynamic_cast static_cast reinterpret_cast C 中有三种主要的类型转换运算符&#xff1a;dynamic_cast、static_cast 和 reinterpret_cast。这些转换运算符可…

【C++】3. 缺省参数

文章目录 一、缺省参数的定义二、缺省参数的使用规则 一、缺省参数的定义 在c语言中&#xff0c;我们使用一个函数时&#xff0c;必须要传对应的参数&#xff0c;少一个都不可以。难道函数的参数就不能有个默认值吗&#xff1f;于是C对c做出了改良&#xff0c;创造了缺省参数。…

计数排序问题

文章目录 计数排序程序设计程序分析计数排序 【问题描述】有N个整数,用计数排序法排序 【输入形式】N个整数 【输出形式】N个整数 【样例输入】 10 2 1 4 2 3 3 3 2 9 5 【样例输出】 1 2 2 2 3 3 3 4 5 9 程序设计 C语言 #include<stdio.h> #include<string.h>…

AOP通知中获取数据

AOP通知中获取数据 之前我们写AOP仅仅是在原始方法前后追加一些操作&#xff0c;接下来我们要说说AOP中数据相关的内容&#xff0c;我们将从获取参数、获取返回值和获取异常三个方面来研究切入点的相关信息。 获取切入点方法的参数&#xff1a;所有的通知类型都可以获取参数 …