completablefuture

Java 8原生API也可以开发响应式代码?

时光总嘲笑我的痴心妄想 提交于 2019-11-26 21:00:28
前段时间工作上比较忙,这篇文章一直没来得及写,本文是阅读《Java8实战》的时候,了解到Java 8里已经提供了一个异步非阻塞的接口(CompletableFuture),可以实现简单的响应式编程的模式,因此用这篇文章做个梳理。我是带着下面这几个问题去学习CompletableFuture这个接口的, CompletableFuture是为了解决什么问题而设计的? 它的使用场景是什么?开源软件中有实战使用案例吗? CompletableFuture的常用API都有哪些?如何使用? CompletableFuture和RxJava有什么不同? 这篇文章梳理下来,基本上可以回答前面四个问题,OK,我们进入正文。 基本概念 RPC(远程方法调用)的四种方式有:oneway、sync、future和callback,在dubbo或bolt这类通信框架中,默认使用的是sync模式(同步+阻塞),future和callback都属于异步模式,不过future模式在get的时候会阻塞,callback模式则不需要等待结果,有结果后服务端会回调请求方。 异步调用这类模式,比较适合的场景是IO密集型场景,要执行很多远程调用的任务,并且这些调用耗时可能比较久。以openwrite中的一个case为例:我发布一篇文章,需要给几个不同的写作平台创建文章,这时候我不希望这个过程是顺序的

Java8——异步编程

三世轮回 提交于 2019-11-26 14:23:53
Java8——异步编程 异步编程 所谓异步其实就是实现一个无需等待被调用函数的返回值而让操作继续运行的方法 创建任务并执行任务 无参创建 CompletableFuture<String> noArgsFuture = new CompletableFuture<>(); 传入相应任务,无返回值 runAsync 方法可以在后台执行异步计算,但是此时并没有返回值。持有一个 Runnable 对象。 CompletableFuture noReturn = CompletableFuture.runAsync(()->{ //执行逻辑,无返回值 }); 传入相应任务,有返回值 此时我们看到返回的是 CompletableFuture<T> 此处的 T 就是你想要的返回值的类型。其中的 Supplier<T> 是一个简单的函数式接口。 CompletableFuture<String> hasReturn = CompletableFuture.supplyAsync(new Supplier<String>() { @Override public String get() { return "hasReturn"; } }); 此时可以使用 lambda 表达式使上面的逻辑更加清晰 CompletableFuture<String> hasReturnLambda =