本文では、ThreadPoolExecutor で submit タスクの後に発生する future コールバック関数の生成について調査します。
上記の図のように、submit の後にはまずこのコードブロックに入り、コードブロック内では主に 2 つのタスクが実行されます:1 つは RunnableFuture オブジェクトの作成、もう 1 つは RunnableFuture の実行です。
次に、最初の行のコアコードに入ります。以下のように、FutureTask オブジェクトが作成されます。
FutureTask オブジェクトの最も重要なメンバ変数は次のとおりです:
次に、2 行目のコアコードに入ります。本質的にはスレッドを開始して実行することです:
その後、Java では future.get () と future.cancel () を使用してタスクを開始またはキャンセルする方法について考えます。
まず、future.get () メソッドを見てみましょう:
では、outcome はどこから来るのでしょうか?もちろん、futuretask の run メソッドからです。run メソッドでは、タスクが完了した後の結果が outcome メンバ変数に代入されます。
そして、future.cancel () メソッドは、タスクをキャンセルするためにスレッドを中断状態に設定します: