SpringBoot项目中异步调用接口方式知多少?( 二 )

调用结果:

SpringBoot项目中异步调用接口方式知多少?

文章插图
图片
通过CompletionService方式不管任务添加的顺序是什么,只要通过take方法就能获取执行完的结果,如果没有任务执行完,take方法会阻塞 。
5、CompletableFuture(异步任务编排),JDK1.8public 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 ;}调用结果:
SpringBoot项目中异步调用接口方式知多少?

文章插图
图片
CompletableFuture提供了非常强大的异步编程方法,可同步,可异步,可编排任务执行,异步通过回调的方式执行 。该对象很多的一些方法与前端JAVAScript中的Promise对象有点相像 。
完毕!!!

【SpringBoot项目中异步调用接口方式知多少?】


推荐阅读