JAVA:@Async失效(测试@Async是否生效)-创新互联

一、测试@Async是否生效

1.1、调用方法:

专注于为中小企业提供成都网站制作、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业榆林免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了数千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
public void xxx(String userId){
    // 此处省略若干代码
    System.out.println(1);
    xxxService.xxxAsync(userId);
    System.out.println(2);
}

1.2、被调用方法

public void xxxAsync(String userId){
    System.out.println(3);
    // 此处省略若干代码
    System.out.println(4);
}

1.3、如上所述,如果@Async生效,打印顺序必定是 1/2/3/4 ;反之失效

二、失效的情况和解决办法

失效情况:如果调用方法和被调用方法都在AService中,则不生效

失效原因:同一个类中一个方法调用另一个方法(该方法带着@Async)注解不生效的原因,其实是调用方法是对象本身,这个和bean的生命周期有关,aop的作用对象是代码类。

据说:可以通过 Spring上下文 解决这个问题,但是测试后好像没用(以下是测试代码,请各位大佬指教)

WebApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
UserxxxService userxxxService = (UserxxxService) ac.getBean("userxxxService");
userxxxService.xxxAsync(userId);

解决办法:将@Async注解的方法,移到其它类中,运行顺序肯定是 1/2/3/4

奶奶的,做博客的系统,编辑器问题既然一大堆,第一遍保存没成功,写的东西全丢了,以上是第二遍写的,非常反胃[吐]

完~

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页标题:JAVA:@Async失效(测试@Async是否生效)-创新互联
本文路径:http://myzitong.com/article/dgocei.html