深度解析:多線程Future

Future其實是一種設計模式,它的核心思想假如有一個方法f,它的計算過程是相當耗時的,顯然直接獲取結果是不明智的,因爲需要等待它計算完才能返回。所以可以在調用方法f的時候讓它返回一個Future,通過這個Future可以監控和控制方法f的計算過程。它有幾個核心方法:

get():獲取返回值結果。

cancel():取消方法的執行過程。

isDown():判斷方法是否執行完成。

isCancelled():判斷方法是否已經被取消執行。

FutureTask就是Future的實現類,FutureTask實現了RannableFuture接口,而RannableFuture接口繼承了Rannable接口和Future接口。它有兩個構造方法,一個是傳入一個Callable(就是帶返回值的線程任務),另一個是傳入一個Rannable和一個result,它內部會將它們轉化成一個Callable。這也就說明了其實在代碼的層次上Callable可以看作是由一個Rannable和一個返回值構成的。因爲FutureTask實現了Runnable接口,所以可以直接將FutureTask作爲參數傳給Thread來開啓線程。在FutureTask中,有一個重要的state變量,它有七種狀態,取值0~6,還有兩個核心方法是get和set。set方法就是設置返回值給一個內部變量outcome,並修改state狀態的值。get方法就是返回outcome儲存的結果,首先它會判斷state的狀態是否是正常完成狀態,如果是就返回結果,如果state處於未完成狀態,就讓當前線程處於阻塞狀態,等待喚醒。如果state狀態爲異常或者中斷,就拋出異常信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章