zzh

zzh

ThreadPoolExector回调函数Future

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

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

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

image

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

image

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

image

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

image

image

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

image

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。