Netty-DefaultPromise設(shè)計(jì)分析


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)器不可能有太多)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容