Java中Executor接口用法總結(jié)
本文實(shí)例講述了Java中Executor接口用法。分享給大家供大家參考。具體如下:
1.Java中Executor接口的定義
public interface Executor {
void execute(Runnable command);
}
2.Executors以下靜態(tài)工廠方法創(chuàng)建一個(gè)線程池:
a) newFixedThreadPool:創(chuàng)建一個(gè)定長(zhǎng)的線程池。達(dá)到最大線程數(shù)后,線程數(shù)不再增長(zhǎng)。
如果一個(gè)線程由于非預(yù)期Exception而結(jié)束,線程池會(huì)補(bǔ)充一個(gè)新的線程。
b) newCachedThreadPool:創(chuàng)建一個(gè)可緩存的線程池。當(dāng)池長(zhǎng)度超過(guò)處理需求時(shí),可以回收空閑的線程。
c) newSingleThreadPool:創(chuàng)建一個(gè)單線程executor。
d) newScheduledThreadPool:創(chuàng)建一個(gè)定長(zhǎng)的線程池,而且支持定時(shí)的以及周期性的任務(wù)執(zhí)行。
類似于Timer。但是,Timer是基于絕對(duì)時(shí)間,對(duì)系統(tǒng)時(shí)鐘的改變是敏感的,而ScheduledThreadPoolExecutor只支持相對(duì)時(shí)間。
3.對(duì)比Timer類的應(yīng)用總結(jié)
1) Timer是創(chuàng)建唯一的線程來(lái)執(zhí)行所有的timer任務(wù)。如果一個(gè)任務(wù)超時(shí)了,會(huì)導(dǎo)致其他的TimerTask時(shí)間準(zhǔn)確性出問(wèn)題。
2) 如果TimerTask拋出uncheck 異常,Timer將會(huì)產(chǎn)生無(wú)法預(yù)料的行為。因此,ScheduledThreadPoolExecutor可以完全代替Timer。
3) 為了解決執(zhí)行服務(wù)的生命周期問(wèn)題,ExecutorService接口擴(kuò)展了Executor。線程池將包括3個(gè)狀態(tài):running,shutting down,terminated。
4.Callable和Future
因?yàn)镽unnable沒(méi)有返回值,并且不能拋出checked異常,所以Callable是更佳的抽象。(Callable<Void>表示無(wú)返回值的任務(wù))。
Future描述了任務(wù)的生命周期,并提供了相關(guān)的方法來(lái)獲取任務(wù)的結(jié)果、取消任務(wù)以及檢查任務(wù)完成或則是否取消。
5.CompletionService整合了Executor和BlockingQueue的功能。
其take和poll可以阻塞的獲取完成的任務(wù)。
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Spring AOP如何自定義注解實(shí)現(xiàn)審計(jì)或日志記錄(完整代碼)
這篇文章主要介紹了Spring AOP如何自定義注解實(shí)現(xiàn)審計(jì)或日志記錄(完整代碼),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
java中List集合及其實(shí)現(xiàn)類的方法詳解
本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于java中List集合及其實(shí)現(xiàn)類的方法介紹(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。下面我們就來(lái)學(xué)習(xí)一下吧2019-06-06
使用springboot對(duì)外部靜態(tài)資源文件的處理操作
這篇文章主要介紹了使用springboot對(duì)外部靜態(tài)資源文件的處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
idea 在springboot中使用lombok插件的方法
這篇文章主要介紹了idea 在springboot中使用lombok的相關(guān)資料,通過(guò)代碼給大家介紹在pom.xml中引入依賴的方法,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08
Java ThreadLocal 線程安全問(wèn)題解決方案
這篇文章主要介紹了Java ThreadLocal 線程安全問(wèn)題解決方案的相關(guān)資料,需要的朋友可以參考下2016-09-09
Java中的break和continue關(guān)鍵字的使用方法總結(jié)
下面小編就為大家?guī)?lái)一篇Java中的break和continue關(guān)鍵字的使用方法總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
SpringBoot使用SSE進(jìn)行實(shí)時(shí)通知前端的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringBoot使用SSE進(jìn)行實(shí)時(shí)通知前端,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
Java實(shí)現(xiàn)駝峰和下劃線互相轉(zhuǎn)換的示例代碼
Java對(duì)各種變量、方法和類等要素命名時(shí)使用的字符序列稱為標(biāo)識(shí)符,凡是自己可以起名字的地方都叫標(biāo)識(shí)符。本文為大家分享了Java中如何實(shí)現(xiàn)駝峰命名與下劃線命名的互轉(zhuǎn),感興趣的可以了解一下2022-05-05

