运行ner 如何用于 运行 FutureTask<V> 中的 Callable
How is the runner used to run the Callable in FutureTask<V>
在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
时才会成功)。只有成功 (returns true
),run
方法才能执行此块中的其余代码。由于 Thread.currentThread()
的结果将是调用 run
方法的 Thread
,因此文档是准确的(至少,在成功评估初始 if
部分之后)。
在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
时才会成功)。只有成功 (returns true
),run
方法才能执行此块中的其余代码。由于 Thread.currentThread()
的结果将是调用 run
方法的 Thread
,因此文档是准确的(至少,在成功评估初始 if
部分之后)。