關於Executor框架相關介面和類的作用
阿新 • • 發佈:2019-02-08
前言
最近看《JAVA併發程式設計實戰》時,對Executor框架相關類和介面的作用不太明白。看了些資料,總結一下這些類的基本含義和功能。
正文
1,Executor介面
這個介面是這套體系結構的根介面,它只有一個方法,就是execute(Runnable command)
。這個方法的作用是執行一個實現了Rannable介面的任務
(也就是我們的業務邏輯)。
做這個介面的初衷,是想把任務
和“任務的執行方法(是怎樣執行的)”、“執行緒的使用”、“執行緒的排程”分離開來(也就是解耦)。原來的使用方式如下:
new Thread(new(RunnableTask())).start ()
新的使用方式:
// anExecutor是一個Executor的Executor例項
Executor executor = anExecutor;
// execute方法代表執行一個任務,但如何執行(同步、非同步還是其它方式),還要看execute方法的實現方式
executor.execute(new RunnableTask1());
executor.execute(new RunnableTask2());
2,ExecutorService介面
ExecutorService介面繼承了Executor介面,並在Executor介面的基礎上,提供了一些方法,來管理“任務的執行方式”、檢視“任務的狀態”和管理“執行任務的容器”(在這個體系結構中,任務基礎都是在一個“容器”內執行,而這個容器就是一個執行緒池(ThreadPoolExecutor))。例如:
- <T> Future<T> submit(Callable<T> task):執行一個Callable任務,並返回Future物件。可以通過這個Future物件來“取得任務結果”,“取消任務”等。
- Future<?> submit(Runnable task):執行一個Runnable任務。
- void shutdown():關閉服務,一直等到所有正在執行的任務執行完。新的任務不再被接受。
- boolean awaitTermination(long timeout, TimeUnit unit):阻塞當前執行緒,直到以下條件之一:
- Shutdown方法被呼叫,所有任務都執行完。
- 發生Timeout
- 當前執行緒被中斷(interrupt)
3,ThreadPoolExecutor
ThreadPoolExecutor是ExecutorService的一個實現。使用池化的執行緒,執行使用者提交的任務。通常,使用Executors的工廠方法來建立ThreadPoolExecutor。
4,Executors
這個類就像Collections類一樣,是一個工具類。它提供工具方法和工廠方法為下面的這些類:
- Executor
- ExecutorService
- ScheduledExecutorService
- ThreadFactory
- Callable
5,Callable、Future和FutureTask
關於Callable、Future和FutureTask,請參看:Java併發程式設計:Callable、Future和FutureTask