在 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
时才会成功)。仅当成功(返回 true
)时,run
方法才能够执行此 block 中的其余代码。并且由于 Thread.currentThread()
的结果将是调用 run
方法的 Thread
,因此文档是准确的(至少,在此初始 if
部分已成功评估)。
关于java - 如何使用runner来运行FutureTask<V>中的Callable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52581182/