Oracle官方併發教程之Executor介面
java.util.concurrent中包括三個Executor介面:
- Executor,一個執行新任務的簡單介面。
- ExecutorService,擴充套件了Executor介面。添加了一些用來管理執行器生命週期和任務生命週期的方法。
- ScheduledExecutorService,擴充套件了ExecutorService。支援Future和定期執行任務。
通常來說,指向Executor物件的變數應被宣告為以上三種介面之一,而不是具體的實現類。
Executor介面
Executor
介面只有一個execute方法,用來替代通常建立(啟動)執行緒的方法。例如:r是一個Runnable物件,e是一個Executor物件。可以使用
e.execute(r);
來代替
(new Thread(r)).start();
但execute方法沒有定義具體的實現方式。對於不同的Executor實現,execute方法可能是建立一個新執行緒並立即啟動,但更有可能是使用已有的工作執行緒執行r,或者將r放入到佇列中等待可用的工作執行緒。(我們將線上程池一節中描述工作執行緒。)
ExecutorService介面
新加了更加通用的submit方法。submit方法除了和execute方法一樣可以接受Runnable物件作為引數,還可以接受Callable物件作為引數。使用Callable物件可以能使任務返還執行的結果。通過submit方法返回的Future物件可以讀取Callable任務的執行結果,或是管理Callable任務和Runnable任務的狀態。
ExecutorService也提供了批量執行Callable任務的方法。最後,ExecutorService還提供了一些關閉執行器的方法。如果需要支援即時關閉,執行器所執行的任務需要正確處理中斷。
ScheduledExecutorService介面
ScheduledExecutorService
擴充套件ExecutorService介面並添加了schedule方法。呼叫schedule方法可以在指定的延時後執行一個Runnable或者Callable任務。ScheduledExecutorService介面還定義了按照指定時間間隔定期執行任務的scheduleAtFixedRate方法和scheduleWithFixedDelay方法。