CompletableFuture
- Callable,有结果的同步行为,比如做蛋糕,产生蛋糕
- Runnable,无结果的同步行为,比如喝牛奶,仅仅就是喝
- Future,异步封装Callable/Runnable,比如委托给师傅(其他线程)去做糕点
- CompletableFuture,封装Future,使其拥有回调功能,比如让师傅主动告诉我蛋糕做好了
原理介绍
CompletionStage确保了CompletableFuture能够进行链式调用。
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier){..}
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier,Executor executor){..}
public static CompletableFuture<Void> runAsync(Runnable runnable){..}
public static CompletableFuture<Void> runAsync(Runnable runnable,Executor executor){..}
在Java8中,新增的ForkJoinPool.commonPool()方法,这个方法可以获得一个公共的ForkJoin线程池,这个公共线程池中的所有线程都是Daemon线程,意味着如果主线程退出,这些线程无论是否执行完毕,都会退出系统。
不指定 executor 的话,最后最好使用get方法,或者 死循环防止main线程执行完。