调用结果:
文章插图
图片
通过CompletionService方式不管任务添加的顺序是什么,只要通过take方法就能获取执行完的结果,如果没有任务执行完,take方法会阻塞 。
5、CompletableFuture(异步任务编排),JDK1.8
public boolean createOrder5() {long start = System.currentTimeMillis() ;CompletableFuture<String> userFuture = CompletableFuture.supplyAsync(() -> {return restTemplate.getForObject("http://localhost:8080/users/{1}", String.class, new Object[] {1}) ;}) ;CompletableFuture<String> storageFuture = CompletableFuture.supplyAsync(() -> {return restTemplate.getForObject("http://localhost:8080/storage/{1}", String.class, new Object[] {1}) ;}) ;CompletableFuture<String> discountFuture = CompletableFuture.supplyAsync(() -> {return restTemplate.getForObject("http://localhost:8080/discount/{1}", String.class, new Object[] {1});}) ;CompletableFuture<List<String>> result = CompletableFuture.allOf(userFuture, storageFuture, discountFuture).thenApply((Void) -> {List<String> datas = new ArrayList<>() ;try {datas.add(userFuture.get()) ;datas.add(storageFuture.get()) ;datas.add(discountFuture.get()) ;} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}return datas ;}).exceptionally(e -> {e.printStackTrace() ;return null ;}) ;try {System.out.println(result.get()) ;} catch (InterruptedException | ExecutionException e1) {e1.printStackTrace();}System.out.println("CompletableFuture方式耗时:" + (System.currentTimeMillis() - start) + "毫秒") ;return true ;}
调用结果:文章插图
图片
CompletableFuture提供了非常强大的异步编程方法,可同步,可异步,可编排任务执行,异步通过回调的方式执行 。该对象很多的一些方法与前端JAVAScript中的Promise对象有点相像 。
完毕!!!
【SpringBoot项目中异步调用接口方式知多少?】
推荐阅读
- Kubernetes 1.28发布,包含45项增强功能!
- 车险保什么 车险保什么项目最合算
- 羽绒服的洗涤方法及注意事项 羽绒服的洗涤方法
- 多肉养殖方法及注意事项 多肉养殖方法大全
- 玉树的养殖方法和注意事项玉树的栽培技术 玉树的养殖方法和注意事项是什么
- 新房购买流程及注意事项 房贷做不下来,能退首付吗
- 拼车包车注意事项和细节 拼车包车注意事项
- word怎么添加项目符号 word怎么添加项目符号双引号
- 请教别人的注意事项有哪些 请教别人的注意事项
- 前台服务的注意事项 前台服务要点