(八)guava實(shí)現(xiàn)線程池

Guava 有很多并發(fā)類,包含幾個(gè)ExecutorService?實(shí)現(xiàn),用MoreExecutors助手類來創(chuàng)建實(shí)例,無法直接或子類創(chuàng)建實(shí)例。

概要:2 直接執(zhí)行(少用)?MoreExecutors(多用)? ?3退出Executor服務(wù)? 4監(jiān)聽裝飾器Futures.allAsList()?

一、引入

二、直接執(zhí)行者

場(chǎng)景:在同一個(gè)線程中執(zhí)行任務(wù)。簡(jiǎn)單起見,休眠 500 毫秒阻塞,執(zhí)行調(diào)用完,立即可用

directExecutor() :返回靜態(tài)單例,不會(huì)在對(duì)象創(chuàng)建上,帶來開銷

應(yīng)該更喜歡用MoreExecutors.newDirectExecutorService(),調(diào)用時(shí)創(chuàng)建完整實(shí)現(xiàn)

三、退出 Executor 服務(wù)

問題:線程池運(yùn)行時(shí)關(guān)閉虛擬機(jī),導(dǎo)致 JVM 工作時(shí)無限期掛起

解決:Guava 引入實(shí)例化好執(zhí)行器 Executor 服務(wù)。守護(hù)線程,與 JVM 一起終止

? ? ? ? ? ?還提供了?Runtime.getRuntime().addShutdownHook() 添加關(guān)閉鉤子,設(shè)置 VM 放棄掛起前,等待預(yù)配置超時(shí)時(shí)間

例:無限循環(huán)任務(wù),用包含 100 毫秒超時(shí)時(shí)間 已存在服務(wù)運(yùn)行,超時(shí)后終止 VM 。如沒exitingExecutorService將無限期掛起

四、監(jiān)聽裝飾器

監(jiān)聽裝飾器允許封裝ExecutorService提交任務(wù)時(shí)返回 ListenableFuture 實(shí)例,不是簡(jiǎn)單 Future 實(shí)例

1、ListenableFuture?擴(kuò)展自 Future 接口:(用得少)可添加新方法?addListener(),添加完成時(shí)調(diào)用監(jiān)聽器

2、(用的多)Futures.allAsList() ,在單個(gè) ListenableFuture 組合多個(gè) ListenableFuture 實(shí)例,將所有futures 合并返回結(jié)果

(1)privateListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());

(2)executorService.submit(() -> ctrlStrategy.dump(key, cache));

http://cmsblogs.com/?p=10721

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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