В исходном коде FutureTask<V>
есть является volatile
переменной экземпляра Thread runner
, где в комментарии сказано, что это поток, выполняющий вызываемый объект. Однако runner
никогда не инициализируется в исходном коде. Более того, я не мог найти никакой подсказки, как этот runner
используется для запуска callable.
Вопрос: поскольку runner
никогда не инициализируется, как он используется для запуска Callable
?
sun.misc.Unsafe
с полемrunner
. Я предполагаю, что поле инициализировано собственным кодом.UNSAFE.objectFieldOffset(k.getDeclaredField("runner"));
- person markspace   schedule 30.09.2018UNSAFE.compareAndSwapObject(this, runnerOffset, null, Thread.currentThread()))
.objectFieldOffset
просто возвращает смещение поля. - person awesoon   schedule 30.09.2018