ссылается на рабочий класс ThreadPoolExecutor
private final class Worker
extends AbstractQueuedSynchronizer
implements Runnable
{
final Thread thread;
Runnable firstTask;
volatile long completedTasks;
Worker(Runnable firstTask) {
setState(-1); // inhibit interrupts until runWorker
this.firstTask = firstTask;
this.thread = getThreadFactory().newThread(this);
}
/** Delegates main run loop to outer runWorker */
public void run() {
runWorker(this);
}
}
это некоторый сегмент кода в классе ThreadPoolExecutor
private boolean addWorker(Runnable firstTask, boolean core) {
boolean workerStarted = false;
boolean workerAdded = false;
Worker w = null;
try {
w = new Worker(firstTask);
final Thread t = w.thread;
...
}
}
Я узнал через Google, что Thread - это корень gc. Работник зависит от объекта потока, а поток также зависит от работника. Когда поток работает, если рабочий будет переработан, я знаю, помечен, только если объект недоступен относительно gc root, как работник определяет, что рабочий должен быть помечен для повторного использования. В противном случае рабочий не будет переработан во время работы потока?