java8之CompletableFuture

package com.github.dadiyang.bestpractice.thread;

import org.omg.CORBA.INTERNAL;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

public class CompletableFutureDemo {
    public static Integer calc(Integer para) {

        try {
            //长时间的计算
            TimeUnit.SECONDS.sleep(100);
        } catch (InterruptedException e) {
            e.getMessage();
        }
        return para * para;
    }

    //所有的线程都是Deamo线程,如果主线程退出,所有的都会退出
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CompletableFuture future = CompletableFuture
                .supplyAsync(() -> calc(50))   //开启一个线程,默认的执行任务
                .thenApply((i) -> Integer.toString(i))   //将上一个的执行结果进行处理
                .thenApply((s -> "\"" + s + "\""))
                .thenAccept(System.out::println);

        CompletableFuture future1 = CompletableFuture
                .supplyAsync(() -> calc(50))     ///相当于runnable,底层是通过Excutor实现,启动start
                //将执行结果传递给下一个future
                .thenCompose((i) -> CompletableFuture.supplyAsync(() -> calc(i)))
                //执行最终的处理结果
                .thenApply((s -> "\"" + s + "\""))
                .thenAccept(System.out::println);

        //获取结果
        future.get();
        future1.get();

    }
}

你可能感兴趣的:(java8之CompletableFuture)