CompletableFuture
来源:互联网 发布:淘宝买家信用贷款 编辑:程序博客网 时间:2024/06/06 09:37
一、定义
二、 CompletableFuture中的函数接口
CompletableFuture是java8中添加的一个类,这个类主要的作用就是提供了新的方式来完成异步处理,包括合成和组合事件的非阻塞方式。
管道式类,同lambda 流stream管道式处理一样,需要终端方法终止。
二、 CompletableFuture中的函数接口
函数接口是java8新引入的一个概念,使用函数接口的方法支持lambda表达式,在API中依@FunctionInterface标注。
Runnable:带run的方法参数,不带返回结果
Supplier:带supply的方法参数,带有返回结果。
Function:带apply的方法参数,带返回结果。
Consumer:带accept的方法参数,不带返回结果。
BiFunction: 处理三件事的方法参数,带返回结果。参考:http://blog.csdn.net/a971236184/article/details/78583894
目的:多任务异步处理。
做一件事:
runAsync 不返回结果supplyAsync 返回结果exceptionally 捕捉异常thenApply 做一件事,在其结果上处理,生成新的结果
做两件事:
thenAccept 第一件事完成后做第二件事情(接受第一件事结果),不返回结果thenRun 第一件事完成后做第二件事(两件事无关系)whenComplete 第一件事完成后做第二件事(接受第一件事结果,并捕捉第一件事产生的异常)thenCompose 第一件事完成后做第二件事情(接受第一件事结果),返回结果
做三件事:
thenAcceptBoth 两件事情完成后做第三件事情(接受两件事情的结果),返回结果runAfterBoth 两件事情完成后做第三件事请(与前两件事无关系),不返回结果thenCombine 两件事情完成后做第三件事请,返回结果
示例:
package org.zihao;import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;/** * 测试CompletableFutures,主要用来处理异步任务。 * */public class CompletableFutureTest {private static String first_thing = "first thing...";private static String first_thing_return = "first thing return...";private static String second_thing = "second thing...";private static String second_thing_return = "second thing return...";private static String third_thing = "third thing...";private static String third_thing_return = "third thing return...";public static void main(String[] args) {try {// thenApply();// thenCompose();// thenAcceptBoth();} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}}/** * 做一件事 * * @throws ExecutionException * @throws InterruptedException */public static void generateFuture() throws InterruptedException, ExecutionException {//返回结果CompletableFuture<Void> completableFuture1 = CompletableFuture.runAsync(() -> {System.out.println(first_thing);});//不返回结果CompletableFuture<String> completableFuture2 = CompletableFuture.supplyAsync(() -> {System.out.println(second_thing);return second_thing_return;});Void void1 = completableFuture1.get();System.out.println("run result=" + void1 + "\r\n" + "supply result=" + completableFuture2.get());}/** * 做一件事,并捕捉异常 * * @throws InterruptedException * @throws ExecutionException */public static void exceptionFuture() throws InterruptedException, ExecutionException {CompletableFuture<String> exceptionally = CompletableFuture.supplyAsync(() -> {System.out.println(first_thing);return first_thing_return;}).exceptionally(ex -> ex.getMessage());System.out.println(exceptionally.get() + "");}/** * 做一件事,在其结果上处理,生成新的结果 * * @throws ExecutionException * @throws InterruptedException */public static void thenApply() throws InterruptedException, ExecutionException {CompletableFuture<String> thenApply = CompletableFuture.supplyAsync(() -> {System.out.println(first_thing);return first_thing_return;}).thenApply(msg -> msg + "%%");System.out.println(thenApply.get() + "");}/** * 第一件事完成后做第二件事情(接受第一件事结果),不返回结果 */public static void thenAccept() {CompletableFuture.supplyAsync(() -> {System.out.println(first_thing);return first_thing_return;}).thenAccept(msg -> {System.out.println(second_thing + ",get msg=" + msg);});}/** * 第一件事完成后做第二件事(两件事无关系) */public static void thenRun() {CompletableFuture.supplyAsync(() -> {System.out.println(first_thing);return first_thing_return;}).thenRun(() -> {System.out.println("second thing...");});}/** * 第一件事完成后做第二件事(接受第一件事结果,并捕捉第一件事产生的异常) */public static void whenComplete() {CompletableFuture.runAsync(() -> {System.out.println(first_thing);}).whenComplete((s, ex) -> {System.out.println(second_thing + "get msg=" + s + ",exception=" + ex);});CompletableFuture.supplyAsync(() -> {System.out.println(first_thing);return first_thing_return;}).whenComplete((s, ex) -> {System.out.println(second_thing + "get msg=" + s + ",exception=" + ex);});}/** * 第一件事完成后做第二件事情(接受第一件事结果),返回结果 * * @throws InterruptedException * @throws ExecutionException */public static void thenCompose() throws InterruptedException, ExecutionException {CompletableFuture<String> completableFuture1 = CompletableFuture.supplyAsync(() -> {System.out.println(first_thing);return first_thing_return;});CompletableFuture<Object> completableFuture2 = completableFuture1.thenCompose(msg -> CompletableFuture.supplyAsync(() -> {System.out.println(second_thing + ",get msg=" + msg);return second_thing_return;}));System.out.println(completableFuture2.get() + "");}/** * 两件事情完成后做第三件事情(接受两件事情的结果),返回结果 * * @throws ExecutionException * @throws InterruptedException */public static void thenAcceptBoth() throws InterruptedException, ExecutionException {CompletableFuture<Void> thenAcceptBoth = CompletableFuture.supplyAsync(() -> {System.out.println(first_thing);return first_thing_return;}).thenAcceptBoth(CompletableFuture.supplyAsync(() -> {System.out.println(second_thing);return second_thing_return;}), (msg1, msg2) -> {System.out.println(third_thing + ",get msg=" + msg1 + ",msg2=" + msg2);});System.out.println(thenAcceptBoth.get() + "");}/** * 两件事情完成后做第三件事请(与前两件事无关系),不返回结果 */public static void runAfterBoth() {CompletableFuture.runAsync(() -> {System.out.println(first_thing);}).runAfterBoth(CompletableFuture.supplyAsync(() -> {System.out.println(second_thing);return second_thing_return;}), () -> {System.out.println(third_thing);});}/** * 两件事情完成后做第三件事请,返回结果 * * @throws InterruptedException * @throws ExecutionException */public static void thenCombine() throws InterruptedException, ExecutionException {CompletableFuture<String> completableFuture1 = CompletableFuture.supplyAsync(() -> {System.out.println(first_thing);return first_thing_return;});CompletableFuture<String> thenCombine = completableFuture1.thenCombine(CompletableFuture.supplyAsync(() -> {System.out.println(second_thing);return second_thing_return;}), (f1, f2) -> {System.out.println(third_thing);return third_thing_return;});System.out.println(thenCombine.get() + "");}}
阅读全文
0 0
- CompletableFuture
- CompletableFuture
- CompletableFuture
- CompletableFuture
- java8-[CompletableFuture]
- CompletableFuture用法
- Java8-CompletableFuture
- Java CompletableFuture
- CompletableFuture 用法示例
- CompletableFuture(一)
- CompletableFuture(二)
- CompletableFuture(三)
- Java8的CompletableFuture之一
- Java CompletableFuture 详解
- Java8的CompletableFuture
- 一个CompletableFuture的例子
- Java8 CompletableFuture讲解
- Java CompletableFuture 详解
- FTP主动模式与被动模式
- 【Python】Matplotlib画图(七)——线的颜色、点的形状
- mysqldump导出时2013问题
- EasyRecyclerView,简单易上手,支持多种常用的功能的RecyclerView
- 初识SQL中in和exists关键字
- CompletableFuture
- angular4项目启动步骤
- 画条虚线
- gradle-3.3-all.zip
- 编写restful接口时通过jsonview来控制输出json中字段的显示或者忽略
- Android中WebView的定位功能、视频全屏播放、下载功能、页面Url的处理、进度条处理
- mysql sql找出一个表中多个字段重复的值
- 购物车的逻辑代码与适配器
- 网络资源积累