【Springboot】springboot 多线程@EnableAsync和@Async

简介: 【Springboot】springboot 多线程@EnableAsync和@Async

一、背景描述

众所周知,java 的代码是同步顺序执行,当我们需要执行异步操作时我们通常会去创建一个新线程去执行,即使用多线程技术,比如显式的 new Thread(),或者线程池 ThreadPoolExecutor

Springboot 中对其进行了简化处理,只需要配置一个类型为 java.util.concurrent.TaskExecutor或其子类的 bean ,并在配置类或直接在程序入口类上声明注解 @EnableAsync

而在 Spring 3.0 之后提供了一个 @Async 注解,使用 @Async 注解进行优雅的异步调用,我们先看一下API对这个注解的定义:Annotation Type Async

我们只需要简单的在启动类或者配置类上添加 @EnableAsync 注解,然后在需要执行的方法上添加 @Async 注解即可

二、使用方法

第一步:配置线程池

以下代码,可以拿来即用:

package com.iot.daily.config.async;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
/**
 * <p>AsyncConfig 此类用于:配置线程池</p>
 * <p>@author:hujm</p>
 * <p>@date:2021年08月09日 16:12</p>
 * <p>@remark:</p>
 */
@Configuration
public class AsyncConfig {
    @Bean
    public TaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 设置核心线程数
        executor.setCorePoolSize(5);
        // 设置最大线程数
        executor.setMaxPoolSize(10);
        // 设置队列容量
        executor.setQueueCapacity(20);
        // 设置线程活跃时间(秒)
        executor.setKeepAliveSeconds(60);
        // 设置默认线程名称
        executor.setThreadNamePrefix("cron-other-statistics-");
        // 设置拒绝策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        // 等待所有任务结束后再关闭线程池
        executor.setWaitForTasksToCompleteOnShutdown(true);
        return executor;
    }
}

第二步:开启异步调用

在启动类上添加 @EnableAsync 注解,或者 在第一步中的 配置类上 添加 @EnableAsync 注解也可以。

第三步:异步调用

三、代码测试

从以下程序的打印日志中可以看出线程池已经正常工作了。

完结!


相关文章
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
972 0
|
Java 开发者 Spring
【SpringBoot 异步魔法】@Async 注解:揭秘 SpringBoot 中异步方法的终极奥秘!
【8月更文挑战第25天】异步编程对于提升软件应用的性能至关重要,尤其是在高并发环境下。Spring Boot 通过 `@Async` 注解简化了异步方法的实现。本文详细介绍了 `@Async` 的基本用法及配置步骤,并提供了示例代码展示如何在 Spring Boot 项目中创建与管理异步任务,包括自定义线程池、使用 `CompletableFuture` 处理结果及异常情况,帮助开发者更好地理解和运用这一关键特性。
2263 1
|
9月前
|
Java 测试技术 Spring
SpringBoot+@Async注解一起用,速度提升
本文介绍了异步调用在高并发Web应用性能优化中的重要性,对比了同步与异步调用的区别。同步调用按顺序执行,每一步需等待上一步完成;而异步调用无需等待,可提升效率。通过Spring Boot示例,使用@Async注解实现异步任务,并借助Future对象处理异步回调,有效减少程序运行时间。
316 3
|
算法 NoSQL Java
Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)
这篇文章介绍了Spring Boot 3中GraalVM Native Image Support的新特性,提供了将Spring Boot Web项目转换为可执行文件的步骤,并探讨了虚拟线程在Spring Boot中的使用,包括如何配置和启动虚拟线程支持。
1035 9
Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)
|
Java Spring
运行@Async注解的方法的线程池
自定义@Async注解线程池
509 3
|
Java
SpringBoot线程问题
SpringBoot线程问题
157 0
|
Java Spring
spring boot 中默认最大线程连接数,线程池数配置查看
spring boot 中默认最大线程连接数,线程池数配置查看
1026 4
|
Java Spring 容器
Spring boot 自定义ThreadPoolTaskExecutor 线程池并进行异步操作
Spring boot 自定义ThreadPoolTaskExecutor 线程池并进行异步操作
1131 3
|
Java UED
基于SpringBoot自定义线程池实现多线程执行方法,以及多线程之间的协调和同步
这篇文章介绍了在SpringBoot项目中如何自定义线程池来实现多线程执行方法,并探讨了多线程之间的协调和同步问题,提供了相关的示例代码。
4261 0
|
Java 测试技术
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
341 0

热门文章

最新文章