运行程序如何用于在FutureTask <v>中运行Callable

时间:2018-09-30 19:05:26

标签: java futuretask

source code of FutureTask<V>中,有一个volatile 实例变量 Thread runner,其中注释表明它是运行可调用对象的线程。但是,runner从未在源代码中初始化。而且,我找不到任何线索来使用此runner来运行可调用对象。

问题:由于从未初始化过runner,因此如何使用它来运行Callable

1 个答案:

答案 0 :(得分:1)

在代码中您可以看到

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

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