首页 > 作文

Java Spring注解之@Async的基本用法和示例

更新时间:2023-04-06 02:21:22 阅读: 评论:0

背景

通常,在java中的方法调用都是同步调用,比如在a方法中调用了b方法,则在a调用b方法之后,必须等待b方法执行并返回后,a方法才可以继续往下执行。这样容易出现的一个问题就是如果b方法执行时间较长,则可能会导致调用a的请求响应迟缓,为了解决这种问题,可以使用spirng的注解@async来用异步调用的方式处理,当然也会有别的多线程方式解决此类问题,本文主要分析@async在解决此类问题时的用法以及具体的示例。

异步调用

比如方法a调用方法b,如果b是一个异步方法,则a方法在调用b方法之后,不用等待b方法执行完成,而是直接往下继续执行别的代码。

@async介绍

在spring中,使用@async标注某方法,可以使该方法变成异步方法,这些方法在被调用的时候,将会在独立的线程中进行执行,调用者不需八年级英语下册课件等待该方法执行完成。

在spring中启用@async

使用@enableasync

示例一:基本使用方式

在方法上添加@async注解

调用异步方法

从执行结果可以看出,main线程中的func1方法在调用异步方法test2后,没有等待test2方法执行完成,直接执行后面的代码。

示例二:在同一个类中调用异步方法

方法func2和上面的异步方法test2方法在同一个类中

从执行结果可知,main线程中的func2方法在调用异步方法test2方法后,等待test2方法执行完后,才继续往后执行。

示例三:异步方法是static方法

异步方法test3是一个static方法

调用test3的方法

执行结果。可以看出在static方法上添加@async注解,当调用该方法时并没有新启用一个线程单独执行,而是按顺序执行代码,说明异步无效。

示例四:在方法级别上修改默认的执行器

自定义一个线程池执行器代替默认的执行器

自定义的线程池执行器

异步方法上使用自定义的执行器

调用test4异步方法

从执行结果可以看出,职教新干线@async注解声明使用指定的自定义的异步执行器,已经替换了默认的执行器家用什么车最省油性能最好。而且调用异步方法的main线程没有等待异步方法的执行。

说明:新建自定义的执行器后,注解@async默认就会替换成自定义的执行器,所以在@async注解上可以不用指定。

\(1.01^{365} ≈ 37.7834343329\)
\(0.99^{365} ≈ 0.02551796445\)
相信坚持的力量!

补充:java中异步注解@async的陷阱

或许,你在java后端添加异步过程时会这样处理,然后摇motive摇大摆、灰溜溜地闪,而实际的运行结果却并不是我们期望的那样。那么,现在就将试验结果记录如下,以便少走弯路。

(一)在controller层的公开接口直接添加@async注解

当前端调用该种接口时会立刻结束,意味着开始即结束,不会在乎该异步接口返回三精双黄连的数据,其实这种接口只适合前端下发命令,后续就不管后端的处理流程了,也不需要后端返回的对象。

(二)在controller层的私有接口直接添加@async注解

这种情况是,前端调用后端的公开接口并等待该接口返回,此时在该接口中调用了该层的添加了@async注解的私有方法,也许你期待的是让后端接口立刻返回,让具体的处理过程放在@async注解的私有函数中,可事实并没有达到你的效果,添加了@async注解的私有函数依旧是同步过程,即使你在controller层的类前面添加了@enableasync注解,也无济于事;所以,这种方式达不到异步的效果。我们可以通过日志来验证该过程,如下图所示:

在上图中,我们看到先进入controller层公开接口,然后进入带有@async注解的私有方法,接着跳出,最后又回到controller层公开接口,整个流程就是同步过程,此时的@async注解没有效果。

(三)在rvice层的公开接口直接添加@async注解

在controller层提供同步流程的接口,只是在该层中会调用rvice层的异步接口,只需要在需要用异步流程完成任务的接口上方添加@async注解即可,这种策略是可以实现我们的异步过程的,我们还是通过日志来验证该流程,如下图所示:

在上图中,我们看到流程首先进入controller层,然后立即跳出了controller层,而rvice层的异步接口就是后续完成的任务了,这样的流程已达到我们想要的异步过程了。

总结

到此这篇关于java中@async的基本用法和示例的文章就介绍到这了,更多相关java@async的用法内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-06 02:21:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/3ae59962275638104813ed5a069c6795.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Java Spring注解之@Async的基本用法和示例.doc

本文 PDF 下载地址:Java Spring注解之@Async的基本用法和示例.pdf

标签:方法   注解   接口   线程
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图