多線程任務類,Runnable、Callable、Future、Runnable和FutureTask的關系

引言

多線程開發中,我們經常會遇到Runnable、Callable、Future、Runnable和FutureTask,今天就把這些接口和類的關系來理清楚。

類圖關系

類圖的基本關系

大致畫了下類圖,箭頭元素不是很標準的UML類圖元素,用在線工具畫的,做了些文字說明,見諒見諒。
圖中可以很清晰的看到,RunnableFuture繼承了Runnable、Future接口,FutureTask實現了RunnableFuture接口,同時構造函數依賴了Callable接口。

各類方法介紹

Runnable很簡單,只有一個run()方法,任務在run()方法中執行。
Future類:

  1. cancel(mayInterruptIfRunning),用于中斷取消任務,參數表示是否允許中斷正在執行的任務。
  2. isCancelled(),任務是否被中斷取消。任務在正常完成前取消,返回為true。
  3. isDone(), 任務是否已經結束,需要注意的是如果任務正常終止、異?;蛉∠?,都將返回true。
  4. get(),這是一個異步方法,等任務執行完后,返回的結果。其中拋出了 InterruptedException 任務中斷異常, ExecutionException任務執行的異常等異常,如果任務被取消還會拋出CancellationException取消任務的異常。
  5. get(timeout, unit),同get()方法一樣,但是可以設置任務執行獲取執行結果的超時時長。

RunnableFuture:接口繼承了Runnable、Future等接口。
Callable:接口內部就聲明了一個call()方法,返回了任務執行的結果對象。
FutureTask類實現了RunnableFuture接口,集成了Runnable、Future接口的方法功能,同時構造函數依賴了Callable接口。FutureTask在高并發的情況下,能確保run()方法只執行一次,下面會對其源碼做分析。

分析FutureTask的源碼實現

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容