1. 程式人生 > >關於Executor框架相關介面和類的作用

關於Executor框架相關介面和類的作用

前言

最近看《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