为了账号安全,请及时绑定邮箱和手机立即绑定

runner 是如何用来在 FutureTask<V> 中运行 Callable 的

runner 是如何用来在 FutureTask<V> 中运行 Callable 的

慕无忌1623718 2021-10-20 14:42:28
在 的源代码中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部分被成功评估之后)。


查看完整回答
反对 回复 2021-10-20
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信