同一个类里面,一个方法去调用另外一个有@Async注解的方法,这种情况下异步方法是不会有效果的...

如果你在同一个类中的方法中调用了另外一个有@Async注解的方法,这个方法是不会异步执行的。@Async注解只有在将方法声明为异步任务时才有效,也就是说,只有在调用这个方法时,才会创建新的线程来执行它。因此,如果你在同一个类中的方法中调用了另外一个有@Async注解的方法,实际上就相当于在同一个线程中调用了另外一个方法,所以这个方法是不会异步执行的。

如果你想要在同一个类中的方法中调用另外一个有@Async注解的方法,并且希望这个方法能够异步执行,你可以使用Executor接口或者java.util.concurrent包中的其他类来实现这个功能。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你在同一个中的方法调用了另外一个有`@Async`注解方法,这个方法不会异步执行的。`@Async`注解只有在将方法声明为异步任务时才有效,也就是说,只有在调用这个方法时,才会创建新的线程来执行它。因此,如果你在同一个中的方法调用了另外一个有`@Async`注解方法,实际上就相当于在同一个线程中调用了另外一个方法,所以这个方法不会异步执行的。 如果你想要在同一个中的方法调用另外一个有`@Async`注解方法,并且希望这个方法能够异步执行,你可以使用`Executor`接口或者`java.util.concurrent`包中的其他来实现这个功能。 ### 回答2: 在同一个中,一个方法调用另外一个有@Async注解方法异步方法不会效果的。@Async注解是用于标注异步方法的,它会使被注解方法调用时会通过代理来执行,从而实现异步效果。这意味着被注解方法会在新的线程中执行,而原方法会继续往下执行。 然而,在同一个中的方法之间的调用不会通过代理来执行,而是直接调用。因此,当一个方法使用@Async注解调用同一个中的另一个方法时,被注解方法不会在新的线程中执行,而是在当前线程中执行,因此异步方法不会起作用。 要想在同一个中实现异步方法效果,可以考虑以下两种方式: 1. 将异步方法提取为一个独立的,并通过依赖注入的方式在原中引用该异步。这样,在原调用异步方法时,会通过代理来执行,异步方式生效。 2. 使用Spring中的AopProxy即MessagePublisher或者TaskExecutor为外部创建代理,将异步方法调用提取到该代理中,再在原调用代理方法。这样,调用异步方法时会通过代理来执行,从而实现异步效果。 综上所述,同一个一个方法调用另外一个有@Async注解方法时,异步方法不会效果,需要通过引入外部或创建代理来实现。 ### 回答3: 在同一个里面一个方法调用另外一个有@Async注解方法这种情况异步方法不会效果的。这是因为@Async注解异步方法实际上是通过AOP技术来实现的,Spring会在运行时动态生成一个代理来处理异步调用。但是当异步方法同一个的其他方法调用时,Spring不会为这个生成代理,因此异步调用不起作用。 解决这个问题的方法是从外部调用异步方法,可以通过依赖注入方式在同一个应用程序或模块中的其他调用异步方法。在这种情况下,Spring会为调用异步方法生成代理,并正确处理异步调用。 另外一种解决办法是将异步方法提取到一个单独的中,通过依赖注入方式在需要使用异步方法的地方调用。这样可以确保异步方法调用被正确处理。 需要注意的是,在同一个调用异步方法情况下,如果一定要实现异步效果,可以考虑使用线程池来手动创建线程进行异步处理,但是这样可能会导致线程资源的浪费,因此在设计中要谨慎使用。最好的方式还是将异步方法调用同一个中分离出来,以便能够充分利用Spring的AOP功能实现有效的异步调用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值