@Async注解,可以实现异步处理的功能,它可以有返回值,或者直接在新线程时并行执行一个任务,对于异步来说,它的执行是有条件的,你需要把异步代码块放在单独的类里,当spring在注入时,才不会相互影响,因为异步是一个比较特殊的代理。

异步入口

@EnableAsync

具体的异步方法

/*** 异常的类型应该和同步执行的类分开,这样在ioc建立时不会相互干扰*/
@Service
public class MessageService {@Asyncpublic void msg1() throws Exception {Thread.sleep(5000L);System.out.println("async1:" + LocalDateTime.now() +",id:" + Thread.currentThread().getId());}
}

上面代码中的异步,是一个没有返回值的,一般像发送消息可以采用这种方式。

带有返回值的异步

@Asyncpublic Future<String> asyncMethodWithReturnType() {System.out.println("Execute method asynchronously - "+ Thread.currentThread().getName());try {Thread.sleep(5000);return new AsyncResult<String>("hello world !!!!");} catch (InterruptedException e) {//}return null;}

这种会返回一个委托对象Future,我们如果希望得到它的返回时,需要在主程序中去监听它,就是写在循环,去等待它的返回结果。

Future<String> future = messageService.asyncMethodWithReturnType();while (true) { ///这里使用了循环判断,等待获取结果信息if (future.isDone()) { //判断是否执行完毕System.out.println("Result from asynchronous process - " + future.get());break;}System.out.println("Continue doing something else. ");System.out.println("main end:" + LocalDateTime.now() +",id:" + Thread.currentThread().getId());}

上面代码主程序在执行到异步方法时,由于遇到了while(true),所以会租塞,直到有返回结果为止。

@Async异步功能相关推荐

  1. 异步处理函数async_Spring @Async异步处理注释

    异步处理函数async Spring @Async annotation allows us to create asynchronous methods in spring. Let's explo ...

  2. 使用@Async异步注解导致该Bean在循环依赖时启动报BeanCurrentlyInCreationException异常的根本原因分析,以及提供解决方案

    前言 今天在自己工程中使用@Async的时候,碰到了一个问题:Spring循环依赖(circular reference)问题. 或许刚说到这,有的小伙伴就会大惊失色了.Spring不是解决了循环依赖 ...

  3. 在Grails 2.0中使用Servlet 3.0异步功能

    上周,我与某人谈论了Grails 2中对Servlet 3.0异步功能的新支持,并意识到我对可用功能并不了解. 所以我想我会尝试一下并分享一些例子. 该文档对这个主题有些了解,因此首先介绍一些背景信息 ...

  4. async 异步编程的应用

    async 异步编程的应用 1.为了解决node.js在实际项目中的异步特性,跳出回调大坑. 2.优雅的维护自己的代码. 3.更好的对自己的代码进行流程控制. async.waterfall 1.as ...

  5. Django 3.0 正式发布,开始支持异步功能

    Django 3.0 发布了,此版本带来了一些新特性,其中最值得关注的应当是其开始支持异步功能. 此前我们报导过,有草案提出要让 Django 支持异步.聚集于 HTTP 中间件视图和 ORM,开发者 ...

  6. 笨笨图片批量抓取下载 V0.2 beta[C# | WinForm | 正则表达式 | HttpWebRequest | Async异步编程]...

    一.     先贴一张图,这个界面就是程序的主界面了: 二.     部分代码说明(主要讲解异步分析和下载): 异步分析下载采取的策略是同时分析同时下载,即未等待数据全部分析完毕就开始把已经分析出来的 ...

  7. js:nodejs通过async异步提交事务数据

    一,async异步编程 1,异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数.ajax请求等等 waterfall ...

  8. ajax异步详解同步请求,ajax async异步请求和同步请求

    ajax async异步请求和同步请求 ajax是指异步加载.这个异步是相对于页面来说的,页面不刷新就加载服务器数据.ajax中的请求又分为同步请求和异步请求,这里是相对于进程来说的,ajax异步请求 ...

  9. async异步注解和aspect切面注解等注解的原理

    在我们使用spring框架的过程中,在很多时候我们会使用@async注解来异步执行某一些方法,提高系统的执行效率.今天我们来探讨下spring是如何完成这个功能的. 1.spring 在扫描bean的 ...

最新文章

  1. MSSQL 2012 拒绝了对对象 'extended_properties' (数据库 'mssqlsystemresource',架构 'sys')的 SELECT 权限...
  2. qzone.class.php,PHP实现QQ空间自动回复说说的方法
  3. gentoo linux mldonkey 问题解决
  4. python 中的*(星号)和**(双星号)简介
  5. CentOS6.7 安装hadoop2.7.5
  6. [ARC055D]隠された等差数列
  7. java浏览文件夹_一个用java实现简单的文件浏览器
  8. 计算机科技与技术对应岗位,计算机技术与软件专业技术资格名称及岗位基本任职条件...
  9. HowToDoInJava Spring 教程·翻译完成
  10. 第五篇、常用的SQL语句和函数介绍
  11. mybatis 之 parameterType=list
  12. 计算机显示u盘隐藏分区,Win10下U盘多分区启动盘被显示怎么隐藏方法
  13. office 2010 安装
  14. 伪装苹果android id,小心了,别被伪造的 iOS 系统弹窗骗走 Apple ID
  15. 电商平台后台管理系统--->系统详细设计(用户登录、商品管理模块)
  16. php程序员工具箱v0.6,php程序员工具箱官方版
  17. terser作为js代码压缩工具
  18. c语言中猜字母代码怎么打,C语言代码实现猜数字
  19. mysql 代理 mycat_使用MyCAT代理MySQL数据库
  20. 程序员如何轻松实现数据可视化?

热门文章

  1. python合并多个excel代码_Python脚本合并多个Excel文件
  2. 面试准备每日系列:计算机底层之并发编程(一)原子性、atomic、CAS、ABA、可见性、有序性、指令重排、volatile、内存屏障、缓存一致性、四核八线程
  3. CCF 201812-2小明放学
  4. 吴恩达机器学习作业5——偏差与方差
  5. 拆轮子系列--RxJava理解(三)--observeOn
  6. (四)Java中的多线程之间实现同步+多线程并发同步
  7. 第一:Postman安装及使用(超详细)
  8. c++新增加的一个概念称之为_新概念四册中的这个句子是对的吗?
  9. 第2章[2.1] 开发模式及快速测试方式
  10. SOA技术相关介绍(RPC, Web Service, REST,SOAP,JMI)