今天给大家讲的是Java8的源码分析,很具体和详细,希望大家可以认真阅读,肯定会对你有很大的帮助的。
completableFuture是JDK1.8版本新引入的类。下面是这个类:
实现了俩接口,本身是个class。这个是Future的实现类,使用 completionStage
接口去支持完成时触发的函数和操作。
一个 completetableFuture
就代表了一个任务,他能用Future的方法,还能做一些之前说的 executorService
配合 futures
做不了的。
之前future需要等待isDone为true才能知道任务跑完了,或者就是用get方法调用的时候会出现阻塞,而使用 completableFuture
的使用就可以用then,when等等操作来防止以上的阻塞和轮询isDone的现象出现。
1.创建 CompletableFuture
直接new对象。
一个 completableFuture
对象代表着一个任务,这个对象能跟这个任务产生联系。
下面用的 complete
方法意思就是这个任务完成了需要返回的结果,然后用 get()
方法可以获取到。
2.JDK1.8使用的接口类。
在本文的 CompletableFuture
中大量的使用了这些函数式接口。
注:这些声明大量应用于方法的入参中,像 thenApply
和 thenAccept
这俩就是一个用Function一个用Consumer
而lambda函数正好是可以作为这些接口的实现。例如 s->{return 1;}
这个就相当于一个Function。因为有入参和返回结果。
(1)Function
(2)Consumer
对于前面有Bi的就是这样的,BiConsumer就是两个参数的。
(3)Predicate这个接口声明是一个入参,返回一个boolean。
(4)supplier
3.下面是这个类的静态方法
带有Async就是异步执行的意思、也是一个 completableFuture
对象代表着一个任务这个原则。
这种异步方法都可以指定一个线程池作为任务的运行环境,如果没有指定就会使用 ForkJoinPool
线程池来执行
(1) supplyAsync&runAsync
的使用例子。
<pre class="prettyprint hljs livescript" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New&quo