SpringBoot2.0学习第七篇之Asyn异步任务

举报
西魏陶渊明 发表于 2022/09/25 02:30:24 2022/09/25
【摘要】 异步任务 ? 异步任务常用来处理对性能要求比较高的应用,通过减少阻塞,增加并行查询,来提高性能。其实实现异步任务也非常的简单,在Java中也有原生的API。本篇文章教你如何在SpringBoo...

异步任务 ?

异步任务常用来处理对性能要求比较高的应用,通过减少阻塞,增加并行查询,来提高性能。其实实现异步任务也非常的简单,在Java中也有原生的API。本篇文章教你如何在SpringBoot项目下,优雅方便的使用异步编程。

public interface ExecutorService extends Executor {
	<T> Future<T> submit(Callable<T> task);
}

  
 
  • 1
  • 2
  • 3

但是一般使用的时候,需要我们自己去创建线程执行器.如下:

ExecutorService es = Executors.newSingleThreadExecutor();
//开启2个异步并行查询,并将结果添加到list中
List<Future<?>> result = new ArrayList();
result.add(es.submit());
result.add(es.submit());
....
//通过获取查询结果
for(Future<?> f:result){
    //遍历处理查询结果
	f.get();        
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

常见的异步编程就像上面一样,将不需要同步获取结果的查询,使用异步的方式进行查询。在使用的时候在同步阻塞获取结果。

什么场景适合异步?

  1. 业务流程查询或者执行,不需要同步立马获取返回值或者立马执行完成
  2. 具有一个或以上的并行执行

当具有以上两个特性的时候,毫无疑问是非常适合异步来处理的,这样能大大的提高执行效率和执行时间。

这就是异步的使用。而我们本篇将的SpringBoot更加简化了代码。在SpringBoot中我们可以将我们任何的业务类,方法通过@Asyn的方式将方法由同步转换为异步。

SpringBoot带来了更简单的方式

SpringBoot来如何简化操作呢? 在SpringBoot中开发者不需要自己来实现Runnable接口,只要在任何的bean中使用@Asyn注解就可以实现。就和前面一样能带来性能提高。当然前提是要适合自己的业务场景。适合自己的才是最好的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nHFbh0Yy-1658486996408)(http://p1.pstatp.com/large/pgc-image/c334b0adb3c144f9896afe559523c089)]

在每个方法中都睡眠1s,当并行查询时候三个方法最好的情况是一起执行。因此三个方法同时调用最好情况只会耗时1s。而假如不使用异步,三个方法调用,只有一种情况就是,按照调用先后顺序执行,耗时最少是3s。

该say,方法使用Spring的@Async注释进行标记,表明它将在单独的线程上运行。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jKzqBy5V-1658486996409)(http://p3.pstatp.com/large/pgc-image/f3f8412ab1dd42258d9d4b16ce669277)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QcDQp3eA-1658486996409)(https://ws1.sinaimg.cn/large/006tKfTcgy1g0yw2oe19xj30q205ntd5.jpg)]

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/89524833

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。