在 的源代码中FutureTask<V>,有一个volatile 实例变量 Thread runner,其中的注释告诉它是运行可调用的线程。但是,runner从未在源代码中初始化。此外,我找不到任何线索如何runner使用它来运行可调用对象。问题:由于runner从未初始化,如何使用它来运行Callable?
1 回答
侃侃尔雅
TA贡献1801条经验 获得超15个赞
在代码中你可以看到
if (state != NEW || !UNSAFE.compareAndSwapObject(this, runnerOffset, null, Thread.currentThread()))
在run
方法的开始。忽略state != NEW
部分;这会尝试将runner
变量设置为Thread.currentThread()
( 并且仅在当前为 时才会成功null
) 的结果。只有成功(返回true
)该run
方法才能执行此块中的其余代码。并且由于Thread.currentThread()
will的结果是Thread
调用run
方法的那个,所以文档是准确的(至少,在这个初始if
部分被成功评估之后)。
添加回答
举报
0/150
提交
取消