zoukankan      html  css  js  c++  java
  • CompletableFuture1

    public class CompletableFutureTest {
        public static void main(String[] args) throws Exception {
    
            test5();
    
        }
    
        /**
         * whenCompleteAsync指的是异步执行传入的BiConsumer
         * whenComplete 指的是同步执行传入的BiConsumer
         */
        public static void  test1() throws ExecutionException, InterruptedException {
            CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "hello");
             //future.whenCompleteAsync((v, r) -> {
            future.whenComplete((v, r) -> {
                System.out.println("=========");
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("====over=====");
            });
            System.out.println("^^^^^^^^^^");
            System.out.println(future.get());
            Thread.currentThread().join();
        }
    
    
        /**
         * 同样有异步和同步两种方法,thenApply没有异常处理
         * @throws ExecutionException
         * @throws InterruptedException
         */
        public static void  test2() throws ExecutionException, InterruptedException {
            CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> "hello")
                    .thenApply((s) -> {
                        try {
                            System.out.println("==========");
                            TimeUnit.SECONDS.sleep(5);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.println("====over=====");
                        return s.length();
                    });
    //              .thenApplyAsync((s) -> {
    //                    try {
    //                        System.out.println("==========");
    //                        TimeUnit.SECONDS.sleep(5);
    //                    } catch (InterruptedException e) {
    //                        e.printStackTrace();
    //                    }
    //                    System.out.println("====over=====");
    //                    return s.length();
    //                });
            System.out.println("^^^^^^^^^^");
            System.out.println(future.get());
            Thread.currentThread().join();
        }
    
        /**
         * handleAsync 有异常处理
         * @throws ExecutionException
         * @throws InterruptedException
         */
        public static void  test3() throws ExecutionException, InterruptedException {
            CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> "hello")
                    .handleAsync((v, t) -> {
                        return v.length();
                    });
            System.out.println(future.get());
        }
    
        /**
         * thenAcceptAsync 直接将上一个的结果进行消费
         * @throws ExecutionException
         * @throws InterruptedException
         */
        public static void  test4() throws ExecutionException, InterruptedException {
            CompletableFuture.supplyAsync(() -> "hello")
                    .thenAcceptAsync((x) -> {
                        System.out.println(x);
                    });
        }
    
        /**
         *执行完上一个future后再执行一个runnable
         * @throws ExecutionException
         * @throws InterruptedException
         */
        public static void  test5() throws ExecutionException, InterruptedException {
            CompletableFuture.supplyAsync(() -> "hello")
                    .thenRunAsync(() -> {
                        System.out.println("====over===");
                    });
        }
    }
  • 相关阅读:
    8.用户注销
    7.用户登陆,用户退出,记住用户名和密码
    6.后台验证码-session作用域
    5.验证用户名是否已经被注册:AJAXC请求
    4.前端注册表单验证 && 表单回填
    3.注册后台处理逻辑编写
    HTTP Status 500
    jquery之stop()的用法
    angular.forEach
    jquery如何获取第一个或最后一个子元素?
  • 原文地址:https://www.cnblogs.com/moris5013/p/12019941.html
Copyright © 2011-2022 走看看