Springboot中,异步线程的执行顺序的控制

news2024/11/17 14:33:09

1、顺序的定义

异步任务存在如下几种顺序:顺序的开启子任务(运行顺序和结束顺序不确定)。顺序的完成(就是A先启动,先执行完,再执行B任务,往往A、B之间存在某种依赖关系)。还有就是优先级的排序,就是A,B,C任务都在排队,来了个优先级更高的D任务,那么就在存在资源的时候,优先执行D任务。

2、异步的定义

笔者认为:异步最重要的就是主线程的运行进程不会因为子线程有没有做完而阻塞。简单的例子就是妈妈让孩子去米,妈妈发出买米这个命令之后就应该去做其他的了。而不应该等米下锅,妈妈在那里干等着。

映射到Springboot中,最主要的应该就是接口调用之后,不管异步任务是否完成,都应该返回结果给前端。

3、实现策略的尝试

3.1、把异步作为一般方法放到同一个异步方法中

针对:顺序的完成(就是A先启动,先执行完,再执行B任务,往往A、B之间存在某种依赖关系)。

这个实现非常简单,只需要调用一个异步任务,其他的调用顺序交给子任务就好。

例如让孩子去买米。妈妈只需要发出这个买米的信号。至于先去超市,再买米,再把米拿回来这三个任务就交给孩子控制就好。体现在代码里面就是在异步任务里面普通的方法调用。

3.2、使用线程池,定义优先级

针对:优先级的排序,就是A,B,C任务都在排队,来了个优先级更高的D任务,那么就在存在资源的时候,优先执行D任务。

这里可以才用线程池是实现,而不是注解。可以参考下面的链接。为ThreadPoolTaskExecutor使用PriorityBlockingQueue

https://blog.csdn.net/qq_38397501/article/details/125280650

4、针对Future的思考

实现链接请查考:https://javaforall.cn/157831.html

Future也是@Async返回值的一种,而且通过返回值我们可以判断该任务是否已经结束。如果我们有异步执行的任务A,B,C,我们可以通判断A任务是否执行完再执行B。这样也完成了顺序的控制。

问题是在哪里去判断呢? 如果在主线程中去判断,那么是不是就做成了等米下锅的事实。就是主任务需要等待异步任务是否完成,才能决定是否进行下一步。

那么我们能不能开个异步任务来执行这A,B,C三个任务呢,技术上是可行的。但是如果开了异步任务,考虑是否需要再使用Future,保证顺序,使用同步任务更好,那就作成3.1的做法。而且在异步任务里面再开线程或者异步任务,本身就是非常不可取的做法。因为会导致线程指数级增加,一旦并发过高,性能将快速下降。

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

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

相关文章

思科设备-配置静态路由

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪 (*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu &a…

【云原生进阶之容器】第四章Operator原理4.2节--CRD

1 CRD概述 1.1 CRD简介 CRD全称是CustomResourceDefinition,在Kubernetes 中一切都可视为资源,Kubernetes 1.7 之后增加了对 CRD 自定义资源二次开发能力来扩展 Kubernetes API,通过 CRD 我们可以向 Kubernetes API 中增加新资源类型,而不需要修改 Kubernetes 源码来创建自…

Django搭建个人博客Blog-Day03

对user模块进行开发设计数据表Django默认就提供了和用户相关的功能,但是这个Django默认提供的功能有个不好的点: 不太适合我们的项目,例如里面的字段不够等,所以我们要对它进行改造一下,方便项目开发。拓展用户模型进入虚拟环境安…

java1算法

排序–comparable接口 java提供了一个接口Comparable用来定义类的排序规则 eg: 1、定义一个学生类Student,具有年龄age和姓名username连个属性,并通过Comparable接口提供比较规则; 2、定义测试类Test,在测试类中定义测试方法Comparable getM…

还不会用YakitBp?来,我教你

前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:被吉师散养的职业混子 🍂相应专栏:CTF专栏 Yakit介绍 好兄弟,你听说过yakit吗&…

Redis五大基本数据类型

Redis五大基本数据类型 1.Redis通用命令 常用命令 #Redis的键key操作 keys * 表示查看当前库所有key 【注意是&#xff1a;可以使用通配符】 exists <key> 表示判断某个key是否存在&#xff0c;存在返回1&#xff0c;否则返回0 type <key> 表示判断key类型 del …

fiddler的下载和安装,及常用操作

目录 一、fiddler介绍 二、fiddler的下载和安装 三、fiddler的简单配置 四、fiddler的抓包 五、fiddler的自动响应器 六、fiddler的断点 七、fiddler的构造器 一、fiddler介绍 Fiddler是比较好用的Web代理调试工具之一&#xff0c;它能记录并检查所有客户端与服务端的HT…

【SpringCloud09】Ribbon负载均衡服务调用

1.概述 1.1是什么 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说&#xff0c;Ribbon是Netflix发布的开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时&…

Java 如何设计一款小游戏详细讲解(一)

目录 介绍 讲解 步骤一 步骤二 阶段(一)详细代码 介绍 注&#xff1a;这里是参考黑马程序员课程&#xff0c;其中图片也是直接拿的黑马程序员提供的图片 其中游戏的代码主要参考黑马程序员的课程&#xff0c;登录和注册主要由自己完成。 黑马素材放到这里自取 链接: https…

【Esp32】Spi接口驱动SX1268模块

【Esp32】Spi接口驱动SX1268模块1.硬件接线2. SX1268 模块的 SPI 时序分析3. 基于 ESP32 实现函数封装3.1 读寄存器3.2 写寄存器4. 实验结果日期&#xff1a; 2023-01-13 项目需要用乐鑫的 ESP32开发板驱动 Lora 模块&#xff0c;用的是 深圳SX1268ZTR4-GC的lora模块&#xff…

通行密钥,向无休止的修改密码说再见~

在上一期里《对称加密面临的那些挑战》中&#xff0c;我们提过密码&#xff0c;和多数人理解的不同&#xff0c;日常生活中用于保护账号安全的所谓“密码”&#xff0c;更贴切的称呼应该是“口令”密码。密码学中的密码&#xff0c;和我们日常生活中登录各类信息化系统所使用的…

Vue--》基于Vue的UI组件库,大家应该熟悉并会使用

目录 PC端UI组件库 Element UI IView UI 移动端UI组件库 Vant Cube UI Mint UI Nut UI UI组件库&#xff1a;它是设计系统的一部分&#xff0c;是在我们常规界面设计过程中可以直接用来制作交互图例和搭建页面的组件集合&#xff0c;它可以作为单个组件独立存在&#x…

Linux下的FrameBuffer驱动框架

一、RGB LCD经典显示器件介绍&#xff1a;1、LCD屏幕的重要属性参数&#xff1a;① 分辨率&#xff1a;也就是屏幕上的像素点的个数&#xff1b;② 像素格式&#xff1a;即单个像素点RGB三种颜色的表达方式&#xff0c;包括RGB888、ARGB8888和RGB565等。③ LCD屏幕硬件接口&…

全网最全的Linux中的内核级加强型火墙图文详解

目录 前言 一、Selinux的功能 二、Selinux的状态及管理 三、Selinux的安全上下文 四、SEBOOL 五、SEPORT 六、setrouble 前言 内核级加强型火墙主要是指系统中的selinux功能&#xff0c;该功能开启时&#xff0c;会对系统中的文件和程序产生影响&#xff0c;用户的…

SkyEye:针对飞行模拟器的仿真解决方案

01.飞行模拟器简介 飞行模拟器是一种由人工打造&#xff0c;能够尽可能真实地还原飞机飞行及空中环境的模拟系统&#xff0c;一般用于飞行员培训、飞机设计等工作。飞行模拟器能够模拟如何控制飞机飞行、模拟飞机应用系统的反应&#xff0c;还可模拟一些可能会对飞机系统造成影…

java图片压缩

1背景 查看各种文章&#xff0c;发现thumbnailator的压缩率和压缩效果都不错&#xff0c;thumbnailator又是使用java实现的&#xff0c;所以直接扒源码&#xff0c;找到了里面实现压缩的关键代码&#xff0c;封装成一个压缩工具类&#xff0c;有需要的同学可以参考。thumbnail…

Linux多线程Web服务器(C++实现)

本文实现的是基于Reactor模式epoll&#xff08;边缘触发&#xff09;非阻塞socket非阻塞IO线程池的Web服务器&#xff0c;可以处理GET、POST两种请求&#xff0c;完成展示主页、获取图片、获取视频、登录及注册共五种功能。原理图&#xff1a;上图为本文实现的服务器的原理图&a…

国产GPU芯片迎来突破,算力全球第一,中文编程也有好消息

苦&#xff0c;芯片久矣&#xff0c;终&#xff0c;迎来突破&#xff0c;实在振奋人心&#xff01;最近&#xff0c;国产GPU芯片传来了好消息&#xff0c;国产自研首款通用芯片&#xff0c;以每秒千万亿次的计算能力&#xff0c;创全球算力记录&#xff0c;芯片领域实现跨越式的…

包体积优化 · 实战论 · 怎么做包体优化? 做好能晋升吗? 能涨多少钱?

“ 【小木箱成长营】包体积优化系列文章&#xff1a; 包体积优化 方法论 揭开包体积优化神秘面纱 包体积优化 工具论 初识包体积优化 BaguTree 包体积优化录播视频课 ”一、引言 Hello&#xff0c;我是小木箱&#xff0c;欢迎来到小木箱成长营系列教程&#xff0c;今天将分…

论文投稿指南——中文核心期刊推荐(农业工程)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…