• java:CompletableFuture的简单例子


    java:CompletableFuture的简单例子

    package com.chz.myTest;
    
    import lombok.extern.slf4j.Slf4j;
    
    import java.util.concurrent.CompletableFuture;
    import java.util.concurrent.CompletionStage;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.Future;
    import java.util.function.Function;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    @Slf4j
    public class MyTestCompletableFutureTest
    {
        public static void main1(String[] args) throws ExecutionException, InterruptedException
        {
            Future<String> completableFuture = CompletableFuture.completedFuture("Hello");
            String s = completableFuture.get();
            log.info(s);
        }
    
        public static void main2(String[] args) throws ExecutionException, InterruptedException
        {
            log.info("start");
            CompletableFuture<String> completableFuture = new CompletableFuture<>();
    
            new Thread(()->{
                try {
                    Thread.sleep(2000);
                    log.info("准备调用:complete()");
                    completableFuture.complete("Hello");
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }).start();
    
            log.info("准备调用:completableFuture.get()");
            String s = completableFuture.get();     // 这里会被阻塞
            log.info("result: {}", s);
        }
    
        public static void main3(String[] args) throws ExecutionException, InterruptedException
        {
            log.info("start");
            CompletableFuture<String> completableFuture = new CompletableFuture<>();
    
            new Thread(()->{
                try {
                    Thread.sleep(2000);
                    log.info("准备调用:cancel()");
                    completableFuture.cancel(true);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }).start();
    
            log.info("准备调用:completableFuture.get()");
            try {
                String s = completableFuture.get();     // 这里会被阻塞
                log.info("result: {}", s);
            } catch (Exception e) {
                log.info("exception: {}, {}", e.getClass().getSimpleName(), e.getMessage(), e);
            }
        }
    
        public static void main4(String[] args) throws ExecutionException, InterruptedException
        {
            CompletableFuture<String> supplyAsync = CompletableFuture.supplyAsync(()->{
                return "supplyAsync";
            });
            String s = supplyAsync.get();
            log.info("result: " + s);
        }
    
        public static void main5(String[] args) throws ExecutionException, InterruptedException
        {
            CompletableFuture<String> stringCompletableFuture = CompletableFuture.supplyAsync(() -> "1");
            stringCompletableFuture = stringCompletableFuture.thenCompose(new Function<String, CompletionStage<String>>() {
                @Override
                public CompletionStage<String> apply(String s) {
                    log.info("s1: " + s);
                    return CompletableFuture.supplyAsync(() -> s + " 2");
                }
            });
            stringCompletableFuture = stringCompletableFuture.thenCompose(new Function<String, CompletionStage<String>>() {
                @Override
                public CompletionStage<String> apply(String s) {
                    log.info("s2: " + s);
                    return CompletableFuture.supplyAsync(() -> s + " 3");
                }
            });
            String s = stringCompletableFuture.get();
            log.info("s3: " + s);
        }
    
        public static void main6(String[] args) throws ExecutionException, InterruptedException
        {
            CompletableFuture<String> completableFuture = CompletableFuture
                    .supplyAsync(() -> "Hello")
                    .thenCombine(
                            CompletableFuture.supplyAsync(() -> " World"),
                            (s1, s2) -> s1 + s2
                    );
            String s = completableFuture.get();
            log.info(s);
        }
    
        public static void main7(String[] args)
        {
            CompletableFuture<Void> future = CompletableFuture
                    .supplyAsync(() -> "Hello")
                    .thenAcceptBoth(
                            CompletableFuture.supplyAsync(() -> " World"),
                            (s1, s2) -> {
                                log.info("result: " + (s1 + s2));
                            }
                    );
        }
    
        public static void main8(String[] args) throws InterruptedException
        {
            CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
                log.info("1");
                return "Hello";
            });
            CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
                log.info("2");
                return "Beautiful";
            });
            CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> {
                log.info("3");
                return "World";
            });
            CompletableFuture<Void> voidCompletableFuture = CompletableFuture.allOf(future1, future2, future3);
            voidCompletableFuture.join();
        }
    
        public static void main9(String[] args)
        {
            CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello");
            CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "Beautiful");
            CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> "World");
    
            String combined = Stream.of(future1, future2, future3)
                                    .map(CompletableFuture::join)
                                    .collect(Collectors.joining(" "));
    
            log.info(combined);
        }
    
        public static void main10(String[] args) throws ExecutionException, InterruptedException
        {
            CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {
                log.info("supplyAsync");
                throw new RuntimeException("Computation error!");
            });
            CompletableFuture<String> handle = completableFuture.handle((s, t) -> {
                log.info("handle");
                return (s != null) ? s : "Hello, Stranger!";
            });
            String s = handle.get();
            log.info("result: " + s);
        }
    
    }
    
  • 相关阅读:
    [八股]select,poll与epoll
    微信小程序如何使用scss,less
    推荐学java——MyBatis高级
    『现学现忘』Docker基础 — 24、Docker图形化管理工具Portainer
    第二课 Python的语言环境
    现代信号处理——其他谱估计方法(最大熵谱估计)
    gtest概念应用及原理
    解析标准树状文件为sql语句及代码解析(python版本,txt,mysql)
    JavaScript基础第05天笔记——作用域、变量的作用域、作用域链、预解析、对象
    Pandas数据分析案例(盛华化工锅炉排放数据可视化分析)
  • 原文地址:https://blog.csdn.net/chenhz2284/article/details/139885339