1. 程式人生 > >線程執行器

線程執行器

ram 應用程序 線程調度 run 實現 繼續 led scheduled 提高

自從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的基礎上添加了按計劃執行線程的功能,如延遲執行、定時執行、周期性執行。

線程執行器