DefaultPromise精彩設(shè)計(jì)點(diǎn)
結(jié)構(gòu)中其綁定的eventExecutor,其的監(jiān)聽(tīng)futureListeners(執(zhí)行結(jié)果setSuccess/setFailure/setCancel等成功后進(jìn)行通知),執(zhí)行結(jié)果result(其通過(guò)AtomicReferenceFieldUpdater原子cas設(shè)置其值減少鎖等待),當(dāng)前等待的線程數(shù)waiters(調(diào)用wait或者sync的時(shí)候,等待之前+1,被喚醒后-1),死鎖檢測(cè)(在wait的時(shí)候先看當(dāng)前現(xiàn)場(chǎng)是否是eventloop線程)。
FutureListeners
promise中設(shè)計(jì)了一個(gè)可擴(kuò)展的futureListeners,其類(lèi)型引用為Object,用于適配多種不同類(lèi)型,其精髓在于通過(guò)設(shè)計(jì)達(dá)到節(jié)約內(nèi)存的目的。

如代碼,a.如果listeners為空,則直接賦值。b.如果其為GenericFutureListener,則創(chuàng)建一個(gè)DefaultFutureListeners實(shí)例。
c.如果其為DefaultFutureListeners,則直接添加listener。 通過(guò)這種設(shè)計(jì)可以盡量節(jié)約內(nèi)存,因?yàn)橐话愕谋O(jiān)聽(tīng)不會(huì)有特別多。下面我們來(lái)看看DefaultFutureListeners的設(shè)計(jì)
DefaultFutureListeners
可以看出構(gòu)造器時(shí)候,初始只構(gòu)造2個(gè)GenericFutureListener的數(shù)組(同樣的假設(shè)為了節(jié)約內(nèi)存)。
當(dāng)添加listener的時(shí)候通過(guò)成倍增加,并用復(fù)制函數(shù),快速添加(同樣假設(shè)監(jiān)聽(tīng)器不可能有太多)
