【发布时间】:2018-09-30 19:05:25
【问题描述】:
在source code of FutureTask<V> 中有一个volatile 实例变量 Thread runner,其中的注释告诉它是运行可调用对象的线程。但是,runner 从未在源代码中初始化。此外,我找不到任何线索如何使用这个runner 来运行可调用对象。
问题:由于runner从未初始化,如何使用它来运行Callable?
【问题讨论】:
-
在您链接到的源列表中,有一些使用
runner字段对sun.misc.Unsafe的调用。我假设该字段由本机代码初始化。UNSAFE.objectFieldOffset(k.getDeclaredField("runner")); -
@markspace,我想你的意思是像
UNSAFE.compareAndSwapObject(this, runnerOffset, null, Thread.currentThread()))这样的地方。objectFieldOffset只返回字段偏移量。
标签: java futuretask