博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java~@Async异步功能
阅读量:5944 次
发布时间:2019-06-19

本文共 1376 字,大约阅读时间需要 4 分钟。

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

异步入口

@EnableAsync

具体的异步方法

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

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

带有返回值的异步

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

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

Future
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),所以会租塞,直到有返回结果为止。

转载于:https://www.cnblogs.com/lori/p/10186888.html

你可能感兴趣的文章
获取app当前可用的剩余内存
查看>>
正则表达式 字符转义
查看>>
分享插件
查看>>
CCF NOI1134 奶牛晒衣服
查看>>
决策树
查看>>
CSS常用属性
查看>>
php正则匹配utf-8编码的中文汉字
查看>>
MemCache在Windows环境下的搭建及启动
查看>>
Python之路(第二十一篇) re模块
查看>>
面向对象进阶
查看>>
第五章 引用类型
查看>>
Spring源码阅读 源码环境搭建(一)
查看>>
修改echarts环形图的牵引线及文字位置
查看>>
<知识库的构建> 5-3 马尔科夫逻辑 Markov logic
查看>>
Java Web整合开发(14) -- Struts 1.x 概述
查看>>
adb 命令 (01)
查看>>
微信支付的开发流程
查看>>
一个list<Map>里map其中的一个字段的值相同,如何判断这个字段相同,就把这个map的其他字段存入另一个map中...
查看>>
测试计划
查看>>
linux下crontab实现定时服务详解
查看>>