本文只要探究 ThreadPoolExector 中 submit 任务以后,future 回调函数生成发生的事情。
如上图所示,submit 以后首先进入该代码段,在代码段中主要执行两个任务:一个是创建一个 RunnableFuture 对象,一个是开启线程执行 RunnableFuture。
下面进入第一行核心代码,如下所示,创建了一个 FutureTask 对象。
对于 FutureTask 对象最核心的成员变量如下:
下面进入第二行核心代码,其本质就是开启一个线程并执行:
之后我们考虑 java 如何通过 future.get () 和 future.cancel () 来开启、取消一个任务。
首先看 future.get () 方法:
那么 outcome 来自于哪里?当然是 futuretask 中的 run 方法,在 run 方法中会把任务完成后的结果赋值给 outcome 成员变量。
而对于 future.cancel () 方法,则是设置线程为中断状态来取消任务: