ThreadPoolExector回调函数Future

本文只要探究 ThreadPoolExector 中 submit 任务以后，future 回调函数生成发生的事情。

如上图所示，submit 以后首先进入该代码段，在代码段中主要执行两个任务：一个是创建一个 RunnableFuture 对象，一个是开启线程执行 RunnableFuture。

下面进入第一行核心代码，如下所示，创建了一个 FutureTask 对象。

对于 FutureTask 对象最核心的成员变量如下：

下面进入第二行核心代码，其本质就是开启一个线程并执行：

之后我们考虑 java 如何通过 future.get () 和 future.cancel () 来开启、取消一个任务。
首先看 future.get () 方法：

那么 outcome 来自于哪里？当然是 futuretask 中的 run 方法，在 run 方法中会把任务完成后的结果赋值给 outcome 成员变量。
而对于 future.cancel () 方法，则是设置线程为中断状态来取消任务：