CompletableFuture介绍
Future是Java 5添加的類,用來描述一個(gè)異步計(jì)算的結(jié)果。你可以使用isDone方法檢查計(jì)算是否完成,或者使用get阻塞住調(diào)用線程,直到計(jì)算完成返回結(jié)果,你也可以使用cancel方法停止任務(wù)的執(zhí)行。
雖然Future以及相關(guān)使用方法提供了異步執(zhí)行任務(wù)的能力,但是對(duì)于結(jié)果的獲取卻是很不方便,只能通過阻塞或者輪詢的方式得到任務(wù)的結(jié)果。阻塞的方式顯然和我們的異步編程的初衷相違背,輪詢的方式又會(huì)耗費(fèi)無謂的CPU資源,而且也不能及時(shí)地得到計(jì)算結(jié)果,為什么不能用觀察者設(shè)計(jì)模式當(dāng)計(jì)算結(jié)果完成及時(shí)通知監(jiān)聽者呢?
很多語言,比如Node.js,采用回調(diào)的方式實(shí)現(xiàn)異步編程。Java的一些框架,比如Netty,自己擴(kuò)展了Java的 Future接口,提供了addListener等多個(gè)擴(kuò)展方法;Google guava也提供了通用的擴(kuò)展Future;Scala也提供了簡單易用且功能強(qiáng)大的Future/Promise異步編程模式。
作為正統(tǒng)的Java類庫,是不是應(yīng)該做點(diǎn)什么,加強(qiáng)一下自身庫的功能呢?
在Java 8中, 新增加了一個(gè)包含50個(gè)方法左右的類: CompletableFuture,提供了非常強(qiáng)大的Future的擴(kuò)展功能,可以幫助我們簡化異步編程的復(fù)雜性,提供了函數(shù)式編程的能力,可以通過回調(diào)的方式處理計(jì)算結(jié)果,并且提供了轉(zhuǎn)換和組合CompletableFuture的方法。
CompletableFuture類實(shí)現(xiàn)了Future接口,所以你還是可以像以前一樣通過get方法阻塞或者輪詢的方式獲得結(jié)果,但是這種方式不推薦使用。
CompletableFuture和FutureTask同屬于Future接口的實(shí)現(xiàn)類,都可以獲取線程的執(zhí)行結(jié)果。
總結(jié)
以上是生活随笔為你收集整理的CompletableFuture介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线程回顾Thread
- 下一篇: CompletableFuture 创建