java中使用异步方式调用接口@Async

发布时间 2023-08-01 18:08:17作者: 锦瑟流年3344

@Async使用:

  • 1、首先在启动类上开启注解@EnableAsync
  • 2、然后需要异步操作的方法上加上@Async
    */
    public class AsyncTest {
    @Async
    public void test() throws InterruptedException {
    //做处理
    Thread.sleep(1000);
    } /**
    • 如果需要返回值的话,通过AsyncResult进行封装
      */
      @Async
      public Future testReturn() throws InterruptedException {
      //做处理
      Thread.sleep(1000);
      return new AsyncResult<>(“hello”);
      }
      }
    • // 调用测试接口    
      @GetMapping(value = "/testAsync") public String testAsync() throws Exception { String a=service.abc(); System.out.println(a); return "abc"; }
      //测试代码
      @Async
          public void a(String _method, String _param) throws Exception {
              Thread.sleep(100000);
          }

      直接返回:abc

注解不生效问题:

@Async注解使用有几个限制:

两个方法都在同一个类里面,只是一个方法调用另一个异步方法,不生效。

解决方法:拆分两个方法,将异步方法单独放在一个类里面,然后再去调用就解决了。

有接口方法的实现类里的注解不生效。
例子:
@Controller类:DemoController
接口:DemoService
接口的实现@Service类:DemoServiceImpl
其中的同步方法为:incr()
DemoController中的实例化为

@Autowired
private DemoService demoService;
1
2
调用的时候为:

demoService.incr();
1
那么这个异步没有效果。
解决方法:在实现类中调用一个没有接口的类才可以。
————————————————
版权声明:本文为CSDN博主「冰红茶不会渴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43241706/article/details/121555913