本文只要探究 ThreadPoolExector 中 submit 任務以後,future 回調函數生成發生的事情。
如上圖所示,submit 以後首先進入該程式碼段,在程式碼段中主要執行兩個任務:一個是創建一個 RunnableFuture 對象,一個是開啟線程執行 RunnableFuture。
下面進入第一行核心程式碼,如下所示,創建了一個 FutureTask 對象。
對於 FutureTask 對象最核心的成員變量如下:
下面進入第二行核心程式碼,其本質就是開啟一個線程並執行:
之後我們考慮 java 如何通過 future.get () 和 future.cancel () 來開啟、取消一個任務。
首先看 future.get () 方法:
那麼 outcome 來自於哪裡?當然是 futuretask 中的 run 方法,在 run 方法中會把任務完成後的結果賦值給 outcome 成員變量。
而對於 future.cancel () 方法,則是設置線程為中斷狀態來取消任務: