В коде вы можете увидеть
if (state != NEW ||
!UNSAFE.compareAndSwapObject(this, runnerOffset,
null, Thread.currentThread()))
в начале метода run
.Игнорирование части state != NEW
;это попытается установить переменную runner
на результат Thread.currentThread()
(и будет успешным, только если она в настоящее время null
).Только в случае успеха (возвращает true
) метод run
сможет пройти через остальную часть кода в этом блоке.И поскольку результатом Thread.currentThread()
будет Thread
, который вызвал метод run
, документация является точной (по крайней мере, после того, как эта начальная if
часть успешно оценена).