本文實(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í)行柒爵。
類(lèi)似于Timer役电。但是,Timer是基于絕對(duì)時(shí)間棉胀,對(duì)系統(tǒng)時(shí)鐘的改變是敏感的法瑟,而ScheduledThreadPoolExecutor只支持相對(duì)時(shí)間。
3.對(duì)比Timer類(lèi)的應(yīng)用總結(jié)
- Timer是創(chuàng)建唯一的線程來(lái)執(zhí)行所有的timer任務(wù)唁奢。如果一個(gè)任務(wù)超時(shí)了霎挟,會(huì)導(dǎo)致其他的TimerTask時(shí)間準(zhǔn)確性出問(wèn)題。
- 如果TimerTask拋出uncheck 異常麻掸,Timer將會(huì)產(chǎn)生無(wú)法預(yù)料的行為酥夭。因此,ScheduledThreadPoolExecutor可以完全代替Timer脊奋。
- 為了解決執(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ì)有所幫助。