線程執行器

自從java 5開始,java併發API提供了一套機制,這套機制稱之爲執行器框架(Executor Framework),圍繞着Executor接口和它的子接口ExecutorService,以及實現這兩個接口ThreadPoolExecutor類展開。
這套機制分離了任務的建立和執行。經過使用執行器,僅須要實現Runnable接口的對象,而後將這些對象發送給執行器便可。
執行器經過建立所需的線程,來負責這些Runnable對象的建立、實例化以及運行。
可是執行器功能不限於此,它使用了線程池來提升應用程序的性能。當發送一個任務給執行器時,執行器會嘗試使用線程池中的線程來執行這個任務,避免了不斷地建立和銷燬線程而致使系統性能降低。
執行器框架另一個重要的優點是Callable接口。它相似於Runnable接口,可是卻提供了兩方面的加強:
1).這個接口的主方法名稱爲call(),能夠返回結果。
2).當發送一個Callable對象給執行器時,將得到一個實現Future接口的對象,可使用這個對象來控制Callable對象的狀態和結果。

建立線程執行器的基本步驟:
1).經過Executors類來建立線程執行器的線程池,例如;
ThreadPoolExecutor executor = Executors.newCachedThreadPool();
注:Executors類能夠建立多種類型的線程池,如:
Executors.newCachedThreadPool():是一個會根據須要建立新線程的線程池。
Executors.newSingleThreadExecutor():是使用單個worker線程的Executor。
Executors.newFixedThreadPool():被稱爲可重用固定線程數的線程池
2).經過線程池對象執行任務
executor.execute(task);//該方法執行後沒有返回值
或者
executor.submit(task);//該方法執行後返回Future接口對象,該接口中聲明瞭一些方法來獲取任務對象產生的結果,並管理它們的狀態
注:一旦建立了執行器,就可使用執行器的execute()方法或者submit()方法來發送Runnable或者Callable類型的任務
3).關閉線程執行器
executor.shutdown();
注:執行器以及ThreadPoolExecutor類一個重要的特性是,一般須要顯示的去結束它。
若是不這樣作,那麼執行器將繼續執行,程序也不會結束。若是執行器沒有任務可執行了,它將繼續等待新任務的到來,而不會結束執行。
java應用程序不會結束直到全部非守護線程結束它們的運行,所以,若是沒有終止執行器,應用程序將永遠不會結束。

ThreadPoolExecutor類:做爲java.util.concurrent包對外提供基礎實現,之內部線程池的形式對外提供管理任務執行,線程調度,線程池管理等等服務。
ScheduledThreadPoolExecutor類:是線程池執行器的一種,繼承ThreadPoolExecutor,在ThreadPoolExecutor的基礎上添加了按計劃執行線程的功能,如延遲執行、定時執行、週期性執行。java

相關文章
相關標籤/搜索