运行ner 如何用于 运行 FutureTask<V> 中的 Callable

How is the runner used to run the Callable in FutureTask<V>

source code of FutureTask<V>里面有一个volatile实例变量Thread runner,这里注释说是线程运行宁可调用。但是,runner 从未在源代码中初始化。此外,我找不到任何线索 runner 是如何用于 运行 可调用对象的。

问题:既然runner从来没有初始化过,那怎么用到运行Callable

在代码中可以看到

if (state != NEW ||
        !UNSAFE.compareAndSwapObject(this, runnerOffset,
                                     null, Thread.currentThread()))

run 方法的开头。忽略 state != NEW 部分;这会尝试将 runner 变量设置为 Thread.currentThread() 的结果(并且只有当前为 null 时才会成功)。只有成功 (returns true),run 方法才能执行此块中的其余代码。由于 Thread.currentThread() 的结果将是调用 run 方法的 Thread,因此文档是准确的(至少,在成功评估初始 if 部分之后)。