本文實例講述了Java中Executor接口用法。分享給大家供大家參考。具體如下:
1.Java中Executor接口的定義
1
2
3
|
public interface Executor { void execute(Runnable command); } |
2.Executors以下靜態(tài)工廠方法創(chuàng)建一個線程池:
a) newFixedThreadPool:創(chuàng)建一個定長的線程池。達到最大線程數(shù)后,線程數(shù)不再增長。
如果一個線程由于非預(yù)期Exception而結(jié)束,線程池會補充一個新的線程。
b) newCachedThreadPool:創(chuàng)建一個可緩存的線程池。當(dāng)池長度超過處理需求時,可以回收空閑的線程。
c) newSingleThreadPool:創(chuàng)建一個單線程executor。
d) newScheduledThreadPool:創(chuàng)建一個定長的線程池,而且支持定時的以及周期性的任務(wù)執(zhí)行。
類似于Timer。但是,Timer是基于絕對時間,對系統(tǒng)時鐘的改變是敏感的,而ScheduledThreadPoolExecutor只支持相對時間。
3.對比Timer類的應(yīng)用總結(jié)
1) Timer是創(chuàng)建唯一的線程來執(zhí)行所有的timer任務(wù)。如果一個任務(wù)超時了,會導(dǎo)致其他的TimerTask時間準(zhǔn)確性出問題。
2) 如果TimerTask拋出uncheck 異常,Timer將會產(chǎn)生無法預(yù)料的行為。因此,ScheduledThreadPoolExecutor可以完全代替Timer。
3) 為了解決執(zhí)行服務(wù)的生命周期問題,ExecutorService接口擴展了Executor。線程池將包括3個狀態(tài):running,shutting down,terminated。
4.Callable和Future
因為Runnable沒有返回值,并且不能拋出checked異常,所以Callable是更佳的抽象。(Callable<Void>表示無返回值的任務(wù))。
Future描述了任務(wù)的生命周期,并提供了相關(guān)的方法來獲取任務(wù)的結(jié)果、取消任務(wù)以及檢查任務(wù)完成或則是否取消。
5.CompletionService整合了Executor和BlockingQueue的功能。
其take和poll可以阻塞的獲取完成的任務(wù)。
希望本文所述對大家的java程序設(shè)計有所幫助。