Spring中的异步方法@Async失效的原因详解

 更新时间:2024年01月13日 09:10:24   作者:java架构师-太阳  
这篇文章主要介绍了Spring中的异步方法@Async失效的原因详解,@Async属于异步注解,@Async放在方法上标识该方法为异步方法,异步是指进程不需要一直等待下去,而是继续执行下面的操作,不管其他进程的状态,需要的朋友可以参考下

Spring中的异步方法@Async失效的原因

1.没有在配置类中开启@EnableAsync注解,导致异步方法失效。

@Configuration
@EnableAsync // 开启异步支持
public class AppConfig {
    // ...
}

2.异步方法必须要被其它类中的方法调用,如果在同一个类中调用,异步方法仍然是同步执行的。

@Service
public class DemoService {
    @Async
    public void asyncMethod() {
        // ...
    }
    
    public void callAsyncMethod() {
        asyncMethod(); // 异步方法不会被异步执行
    }
}

@Service
public class CallerService {
    @Autowired
    private DemoService demoService;
    
    public void callAsyncMethod() {
        demoService.asyncMethod(); // 异步方法会被异步执行
    }
}

3.异步方法必须要在public方法中被调用,如果被同类中的private方法调用,异步方法仍然是同步执行的。

@Service
public class DemoService {
    @Async
    public void asyncMethod() {
        // ...
    }
    
    public void callAsyncMethod() {
        privateMethod(); // 异步方法不会被异步执行
    }
    
    private void privateMethod() {
        asyncMethod(); // 异步方法不会被异步执行
    }
}

4.异步方法必须是非静态方法,如果是静态方法,异步方法仍然是同步执行的。

@Service
public class DemoService {
    @Async
    public static void asyncMethod() {
        // ...
    }
    
    public void callAsyncMethod() {
        asyncMethod(); // 异步方法不会被异步执行
    }
}

5.异步方法必须要有返回值,如果没有返回值,异步方法仍然是同步执行的。

@Service
public class DemoService {
    @Async
    public void asyncMethod() {
        // ...
    }
    
    @Async
    public Future<String> asyncMethodWithResult() {
        // ...
        return new AsyncResult<>("result");
    }
}

@Service
public class CallerService {
    @Autowired
    private DemoService demoService;
    
    public void callAsyncMethod() {
        demoService.asyncMethod(); // 异步方法不会被异步执行
        Future<String> future = demoService.asyncMethodWithResult(); // 异步方法会被异步执行
    }
}

到此这篇关于Spring中的异步方法@Async失效的原因详解的文章就介绍到这了,更多相关Spring的@Async失效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springcloud gateway如何实现路由和负载均衡

    springcloud gateway如何实现路由和负载均衡

    这篇文章主要介绍了springcloud gateway如何实现路由和负载均衡的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 详解Java的回调机制

    详解Java的回调机制

    最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,本文介绍了Java的回调机制,有兴趣的同学可以了解一下
    2016-10-10
  • Java Swing JToggleButton开关按钮的实现

    Java Swing JToggleButton开关按钮的实现

    这篇文章主要介绍了Java Swing JToggleButton开关按钮的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • RocketMQ重试机制及消息幂代码实例解析

    RocketMQ重试机制及消息幂代码实例解析

    这篇文章主要介绍了RocketMQ重试机制及消息幂代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Spring框架设值注入操作实战案例分析

    Spring框架设值注入操作实战案例分析

    这篇文章主要介绍了Spring框架设值注入操作,结合具体实例形式分析了spring框架设值注入相关实现与使用方法,需要的朋友可以参考下
    2019-11-11
  • 浅析Java NIO 直接缓冲区和非直接缓冲区

    浅析Java NIO 直接缓冲区和非直接缓冲区

    本篇文章主要为大家介绍了Java NIO 中直接缓冲区和非直接缓冲区的定义以及使用流程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • 一文解决System.in关闭后无法再继续使用流的问题

    一文解决System.in关闭后无法再继续使用流的问题

    这篇文章主要给大家介绍如何解决System.in关闭后无法再继续使用流的问题,文中有详细的解决方法和代码示例,具有一定的参考价值,需要的朋友可以参考下
    2023-07-07
  • 关于log4j2的异步日志输出方式

    关于log4j2的异步日志输出方式

    这篇文章主要介绍了关于log4j2的异步日志输出方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • java集成kafka实例代码

    java集成kafka实例代码

    文章介绍了如何在Java项目中集成Apache Kafka以实现消息的生产和消费,通过添加Maven依赖、配置生产者和消费者、使用SpringBoot简化集成以及控制消费者的启动和停止,可以实现高效的消息处理
    2024-12-12
  • 详解备忘录模式及其在Java设计模式编程中的实现

    详解备忘录模式及其在Java设计模式编程中的实现

    这篇文章主要介绍了详解备忘录模式及其在Java设计模式编程中的实现,备忘录模式数据的存储过程中应当注意浅拷贝和深拷贝的问题,需要的朋友可以参考下
    2016-04-04

最新评论