Springboot异步执行

news2024/12/22 19:34:41

异步执行

  • 1.基于@Async注解的方式
    • 在异步的方法上加 @Async注解,调用接口后
    • 基于@Async注解的方式优缺点:
  • 2.使用 CompletableFuture 实现异步任务
    • 在实现类中创建CompletableFuture 类型的方法
    • 优缺点:
  • 3.使用 TaskExecutor 实现异步任务
    • 优缺点:

1.基于@Async注解的方式

@Async 注解是 Spring 提供的一种轻量级异步方法实现方式,它可以标记在方法上,用来告诉 Spring 这个方法是一个异步方法,Spring 会将这个方法的执行放在异步线程中进行。使用 @Async 注解需要满足以下条件:
1.需要在 Spring Boot 主类上添加 @EnableAsync 注解启用异步功能;
2.需要在异步方法上添加 @Async 注解。

主启动类上加开启注解

在异步的方法上加 @Async注解,调用接口后

在这里插入图片描述

使用 @Async注解

基于@Async注解的方式优缺点:

基于注解的方式
优点:
1.简单易用,只需要在方法上添加@Async注解即可。
2.依赖Spring框架,集成度高,可以与其他Spring组件无缝协作。
缺点:
1.方法必须是public,否则异步执行无效。
2.不能直接获取异步执行结果,需要使用Future或CompletableFuture等类型。

2.使用 CompletableFuture 实现异步任务

CompletableFuture 是 Java 8 新增的一个异步编程工具,它可以方便地实现异步任务。使用 CompletableFuture 需要满足以下条件:
1.异步任务的返回值类型必须是 CompletableFuture 类型;
2.在异步任务中使用 CompletableFuture.supplyAsync() 或 CompletableFuture.runAsync() 方法来创建异步任务;
3.在主线程中使用 CompletableFuture.get() 方法获取异步任务的返回结果。

在实现类中创建CompletableFuture 类型的方法

CompletableFuture类型方法
结果与上面一样都能保证异步执行

优缺点:

实现AsyncConfigurer接口的方式
优点:
更加灵活,可以配置线程池等异步执行的相关参数。
可以通过实现AsyncUncaughtExceptionHandler接口来捕获异步执行中的异常。
缺点:
需要在代码中手动创建线程池,相对比较繁琐。
方法必须返回Future或CompletableFuture等类型,否则无法异步执行。

3.使用 TaskExecutor 实现异步任务

TaskExecutor 是 Spring 提供的一个接口,它定义了一个方法 execute(),用来执行异步任务。使用 TaskExecutor 需要满足以下条件:
1.需要在 Spring 配置文件中配置一个 TaskExecutor 实例;
2.在异步方法中调用 TaskExecutor 实例的 execute() 方法来执行异步任务。

先写一个配置类,配置一个 TaskExecutor 实例

package com.peng.config;

import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.aop.interceptor.SimpleAsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;

@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
    @Bean(name = "asyncExecutor")
    public TaskExecutor asyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10);
        executor.setMaxPoolSize(20);
        executor.setQueueCapacity(100);
        executor.setThreadNamePrefix("async-");
        executor.initialize();
        return executor;
    }

    @Override
    public Executor getAsyncExecutor() {
        return asyncExecutor();
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return new SimpleAsyncUncaughtExceptionHandler();
    }
}

实现类中调用execute进行实现
在这里插入图片描述
最后结果与上相同,可正常执行异步

优缺点:

基于ThreadPoolTaskExecutor的方式
优点:
基于Spring内置的线程池实现,省去手动配置线程池的繁琐过程。
可以设置队列容量和拒绝策略,控制异步任务的执行顺序和并发量。
缺点:
略微复杂,需要手动创建ThreadPoolTaskExecutor实例,并将其注入到需要异步执行的方法中。

参考https://mp.weixin.qq.com/s/I_3GJfZgz21DnuXmrJEzgg

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

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

相关文章

电子企业使用MES管理系统有没有弊端

随着制造业的不断现代化和数字化,越来越多的电子企业开始使用MES生产管理系统。电子企业MES系统是一种用于监控和管理制造业生产过程的软件,能够帮助企业提高生产效率、降低成本、提高质量和灵活性。然而,电子企业使用MES管理系统也存在一些弊…

Autohotkey按键映射

文章目录 功能前缀鼠标按键键盘按键虚拟键码和扫描码实操 功能前缀 尽管在初步使用中已经对常见热键做了说明&#xff0c;但为了本文的完整性&#xff0c;这里还是重新表述一下 #!^<^>!winAltCtrlShiftAlt Gr 其中&#xff0c;<, >为修饰符&#xff0c;用于区分…

使用不同类型注释的小肠路径跟踪深度强化学习

文章目录 Deep Reinforcement Learning for Small Bowel Path Tracking Using Different Types of Annotations摘要本文方法环境stateActionreward 实验结果 Deep Reinforcement Learning for Small Bowel Path Tracking Using Different Types of Annotations 摘要 小肠路径…

令人惊艳的六大算法(哈希表、分治算法、动态规划算法、贪心算法、回溯算法、图论算法)

当谈到计算机科学时&#xff0c;算法是一个重要的话题&#xff0c;因为它们能帮助解决很多问题。有些算法尤其令人惊艳&#xff0c;因为它们不仅高效&#xff0c;而且有着惊人的表现。在这篇文章中&#xff0c;我将分享一些我认为令人惊艳的高效算法。 一、哈希表 哈希表是一种…

通用寄存器-汇编复习(1)

弄清寄存器表达,原理和配件及汇编实验验证。 往期文章: 汇编语言基础-汇编复习(0)_luozhonghua2000的博客-CSDN博客 一个典型的 CPU(此处讨论的不是某一具体的 CPU)由运算器、控制器、寄存器(CPU工作原理)等器件构成,这些器件靠内部总线相连。前一章所说的总线,相对于 CP…

4、USB协议学习:USB的数据包结构

文章目录 数据包结构包(Packet)PID令牌包SETUP&OUT&IN令牌包SOF令牌包 数据包握手包ACK 握手包NAK 握手包 事务(Transaction)Setup事务OUT事务IN事务 传输(Transfer)控制传输中断传输批量传输同步传输/等时传输 端点 数据包结构 USB的通讯数据由多个传输组成&#xff0…

Docker 构建多架构 ARM、x86 AMD image镜像

在当今的计算环境中&#xff0c;各种异构计算设备和平台层出不穷&#xff0c;如何保证应用程序能够在不同的平台和设备上顺利运行&#xff0c;已成为亟待解决的问题。 以一款应用程序为例&#xff0c;它可能需要在 ARM、x86 或 s390x 等不同架构的设备上运行。由于这些设备所使…

Linux—实操篇:关机,重启和用户登录注销

1、关机和重启命令 1.1、基本介绍 shutdown -h now 立即关机 shutdown -h 1 一分钟后关机 shutdown -r now 立即重启 halt 立即关机&#xff0c;作用和上面一样 reboot 立即重启 sync 把内存数据同步到磁盘 注意&#xff1a;仅输入shutdown 默认执行&#xff08;shutdow…

Go开发学习 | 如何快速读取json/yaml/ini等格式的配置文件使用示例

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1a;[ https://www.weiyigeek.top ] 博客&…

docker 数据持久化

目录 一、将本地目录直接映射到容器里&#xff08;运行成容器时候进行映射&#xff09; 二、数据卷模式 1、创建数据卷 2、查看数据卷列表&#xff0c;有哪些数据卷 3、查看某个数据卷 4、容器目录挂载到数据卷 5、数据卷的优势&#xff1a;多个容器共享一个数据卷 默认…

元宇宙应用领域-教育

教育是一个国家发展的基础&#xff0c;在科技发展的时代&#xff0c;元宇宙将会帮助教育行业实现跨越式发展。 元宇宙与教育的结合将会对传统的教学模式带来翻天覆地的变化。它能将线上教学、线下体验、远程互动等优势集于一身&#xff0c;也能把教师从繁重的重复劳动中解放出…

贝叶斯伪标签:鲁棒高效半监督分割的期望最大化

文章目录 Bayesian Pseudo Labels: Expectation Maximization for Robust and Efficient Semi-supervised Segmentation摘要作为期望最大化的伪标签基于变分推理的伪标签的推广实验结果 Bayesian Pseudo Labels: Expectation Maximization for Robust and Efficient Semi-super…

Qt上位机开发-学习记录(一)

一、Qt的安装 下载Qt : https://download.qt.io/ 进入archive/qt/&#xff0c;目前5.14版本下&#xff0c;有直接exe安装的版本&#xff0c;就直接下载 qt-opensource-windows-x86-5.14.2.exe安装Qt : 默认安装&#xff0c;过程中可以先全选 二、新建项目 选择Appliation-&g…

静态代码块、动态代码块、构造方法

类与对象 类&#xff1a;描述事物属性和行为 属性&#xff1a;私有化 行为&#xff1a;公开化 对象&#xff1a;就是类的一个具体实例 代码块&#xff1a; 静态代码块 发生在创建对象之前--时机 随着类的加载而加载 构造代码块 发生在创建对象之前&a…

解决小程序富文本显示视频问题

目录 1. 首先用小程序原生的 rich-text 肯定是不行的&#xff0c;它video的HTML节点和属性都不支持的 2. 采用安装插件的方法去处理&#xff08;强烈推荐&#xff1a;mp-html&#xff0c;可用于多端&#xff09; 3. 引入 4. 使用 5. 效果 1. 首先用小程序原生的 rich-text…

NLP实战:中文文本分类-Pytorch实现

目录 一、准备工作 1.任务说明 2.加载数据 二、数据预处理 1.构建词典 2.生成数据批次和迭代器 三、模型构建 1. 搭建模型 2.初始化模型 3. 定义训练与评估函数 四、训练模型 1. 拆分数据集并运行模型 顺便测试指定数据 五、总结 &#x1f368; 本文为[&#x1f517…

Benewake(北醒) 快速实现TF03-CAN与电脑通信操作说明

目录 一、前言二、工具准备三、连接方式3.1 串口通信连接方式3.2 CAN 通信连接方式 四、TF03 与电脑通信操作说明4.1 切换为CAN通信4.2 安装 USB_CAN TOOL 驱动4.3 CAN 通信下修改波特率 五、常见问题反馈5.1 V9.11 USB-CAN tool按照上述方案发送文件指令不成功的解决方案 一、…

跨平台开发的优势:ReactNative与小程序容器技术

结合React Native和小程序容器技术&#xff0c;开发者可以通过热重载和快速迭代提高开发效率&#xff0c;并实现统一的代码和逻辑&#xff0c;简化维护和升级过程。这种技术应用价值使得开发者能够更灵活地构建跨平台应用程序&#xff0c;并充分利用多个生态系统的优势。 Reac…

设计模式之~模板方法模式

定义&#xff1a; 定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 &#xff08;算法的骨架&#xff0c;可以理解为你根据需求设计出来的业务流程&#xff1b; 特定的步骤就是指那…

Ubuntu 17.04 壁纸设计大赛 已经开幕

导读Ubuntu 团队成员 Nathan Haines 向外媒 Softpedia 知会了一场全新的“Free Culture Showcase”活动 —— 为即将到来的 Ubuntu 17.04&#xff08;Zesty Zapus&#xff09;操作系统征集壁纸。 需要指出的是&#xff0c;这场壁纸设计大赛并不会有任何奖励。但如果你的作品有…