深入学习java8 中的CompletableFuture

CompletableFuture是Java8中新增加的一个类,实现了Future的所有特性,并提供了强大的异步编程能力。CompletableFuture可以让你像写同步代码一样写异步代码,大幅度提高代码的可读性和可维护性。

深入学习Java8中的CompletableFuture攻略

什么是CompletableFuture

CompletableFuture是Java8中新增加的一个类,实现了Future的所有特性,并提供了强大的异步编程能力。CompletableFuture可以让你像写同步代码一样写异步代码,大幅度提高代码的可读性和可维护性。

CompletableFuture的常用方法

创建CompletableFuture实例

CompletableFuture<String> future = new CompletableFuture<>();

异步执行一个任务

CompletableFuture.supplyAsync(() -> "Hello, World!");

处理异步任务的结果

future.thenAccept(result -> System.out.println(result));

组合多个异步任务

CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello");
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> " World");
CompletableFuture<String> future3 = future1.thenCombine(future2, (s1, s2) -> s1 + s2);

异常处理

CompletableFuture.supplyAsync(() -> "Hello")
    .thenApplyAsync(str -> {
        if (str == null) {
            throw new RuntimeException("字符串为空!");
        }
        return str + " World";
    })
    .exceptionally(ex -> {
        System.out.println(ex.getMessage());
        return "错误提示信息";
    });

执行任务完成后的回调方法

CompletableFuture.supplyAsync(() -> "Hello")
    .thenAcceptAsync(str -> System.out.println(str))
    .thenRunAsync(() -> System.out.println("任务执行完成!"));

示例1:获取两个异步任务的结果

CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "Hello";
});
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "World";
});
CompletableFuture<String> future3 = future1.thenCombine(future2, (s1, s2) -> s1 + " " + s2);
System.out.println(future3.join());

输出结果:Hello World

示例2:完成异步任务后执行回调方法

CompletableFuture.supplyAsync(() -> "Hello, World!")
    .thenAcceptAsync(str -> System.out.println(str))
    .thenRunAsync(() -> System.out.println("任务执行完成!"));

输出结果:

Hello, World!

任务执行完成!

结语

以上就是关于CompletableFuture的完整攻略和两个示例说明。CompletableFuture让异步编程变得愉悦、简单并且易于维护,它是Java异步编程的必备利器。

本文标题为:深入学习java8 中的CompletableFuture

基础教程推荐