内容简介:@Async注解,可以实现异步处理的功能,它可以有返回值,或者直接在新线程时并行执行一个任务,对于异步来说,它的执行是有条件的,上面代码中的异步,是一个没有返回值的,一般像发送消息可以采用这种方式。这种会返回一个委托对象Future,我们如果希望得到它的返回时,需要在主程序中去监听它,就是写在循环,去等待它的返回结果。
@Async注解,可以实现异步处理的功能,它可以有返回值,或者直接在新线程时并行执行一个任务,对于异步来说,它的执行是有条件的, 你需要把异步代码块放在单独的类
里,当spring在注入时,才不会相互影响,因为异步是一个比较特殊的代理。
- 异步入口
@EnableAsync
- 具体的异步方法
/**
* 异常的类型应该和同步执行的类分开,这样在ioc建立时不会相互干扰
*/
@Service
public class MessageService {
@Async
public void msg1() throws Exception {
Thread.sleep(5000L);
System.out.println("async1:" + LocalDateTime.now() +
",id:" + Thread.currentThread().getId());
}
}
上面代码中的异步,是一个没有返回值的,一般像发送消息可以采用这种方式。
- 带有返回值的异步
@Async
public 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),所以会租塞,直到有返回结果为止。
以上所述就是小编给大家介绍的《java~@Async异步功能》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Django 3.0 发布,开始支持异步功能
- Django 3.0 正式发布,开始支持异步功能
- PHP 异步协程框架 GroupCo 更新至 1.0.9,新增功能
- SpringBoot | :异步开发之异步调用
- 改进异步封装:处理带返回值的异步调用
- 异步发展流程 —— Generators + co 让异步更优雅
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Android软件安全与逆向分析
丰生强 / 人民邮电出版社 / 2013-2 / 69.00元
本书由浅入深、循序渐进地讲解了Android 系统的软件安全、逆向分析与加密解密技术。包括Android软件逆向分析和系统安全方面的必备知识及概念、如何静态分析Android 软件、如何动态调试Android 软件、Android 软件的破解与反破解技术的探讨,以及对典型Android 病毒的全面剖析。 本书适合所有Android 应用开发者、Android 系统开发工程师、Android ......一起来看看 《Android软件安全与逆向分析》 这本书的介绍吧!