猿问

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

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

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


慕无忌1623718
浏览 124回答 1
1回答

侃侃尔雅

在代码中你可以看到if&nbsp;(state&nbsp;!=&nbsp;NEW&nbsp;|| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!UNSAFE.compareAndSwapObject(this,&nbsp;runnerOffset, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;null,&nbsp;Thread.currentThread()))在run方法的开始。忽略state != NEW部分;这会尝试将runner变量设置为Thread.currentThread()( 并且仅在当前为 时才会成功null) 的结果。只有成功(返回true)该run方法才能执行此块中的其余代码。并且由于Thread.currentThread()will的结果是Thread调用run方法的那个,所以文档是准确的(至少,在这个初始if部分被成功评估之后)。
随时随地看视频慕课网APP

相关分类

Java
我要回答