内容简介:异步执行一般用来发送一些消息数据,数据一致性不要求太高的场景,对于spring来说,它把这个异步进行了封装,使用一个注解就可以实现。调用方法执行结果
异步执行一般用来发送一些消息数据,数据一致性不要求太高的场景,对于spring来说,它把这个异步进行了封装,使用一个注解就可以实现。
用法
-
程序启动时开启
@EnableAsync
注解 -
建立新的类型,建立
异步方法
,为方法添加@Async
注解 -
在业务代码中,
@Autowired
注入你的类型,使用它即可我们可以关注到在配置task的时候,是有参数让我们配置线程池的数量的。因为这种实现方法,所以在同一个类中的方法调用,添加@async注解是失效的!,原因是当你在同一个类中的时候,方法调用是在类体内执行的,spring无法截获这个方法调用.
Async几种方式
- 没有返回值的,不会阻塞主线程,相当于开启新线程在后台执行这个任务
@Async public String sayHello2() throws InterruptedException { Thread.sleep(2 * 1000);//网络连接中 。。。消息发送中。。。 return "我爱你啊!";// 调用方调用后会立即返回,所以返回null }
- 带有返回值的,返回类型必须为Future<>,它会开启新的线程执行任务,并阻塞主线程,执行完成后把结果返回给主线程
@Async public Future<String> asyncFunc() throws InterruptedException { int thinking = 2; Thread.sleep(thinking * 1000); System.out.println("async!"); return new AsyncResult<String>("发送消息用了" + thinking + "秒"); }
调用方法
@GetMapping("/lind-demo/asyncFunc") public void async() throws Exception { Future<String> future = null; future = asyncService.asyncFunc(); System.out.println(future.get()); System.out.println("主线程被阻塞执行完成"); }
执行结果
async! 发送消息用了2秒 主线程执行完成
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Spring 中异步注解 @Async 的使用、原理及使用时可能导致的问题
- Spring 注解编程之模式注解
- Java注解之编译时注解
- Java注解之运行时注解
- Java中的注解-自定义注解
- Java注解Annotation与自定义注解详解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。