Подтвердить что ты не робот

Что произойдет, если для потока Java установлено значение null?

После запуска потока, если для ссылки потока установлено значение null, что произойдет с потоком? Остановится ли это? Имеет ли он право на GC?

Вот так:

t.start();
t = null;
4b9b3361

Ответ 1

Живой поток будет продолжать работать, даже если его ссылка имеет значение null.
Как и любой другой объект, когда нет ссылок на него, он имеет право на GC. Сложная точка заключается в том, что работающий поток имеет ссылку в ThreadGroup, даже если ваша программа не сохраняет ее, поэтому текущий поток никогда не GCed.

Ответ 2

что будет с потоком?

Ничего.

Остановится ли это?

Нет.

Соответствует ли он GC?

Нет.

Ответ 3

Нет, установка ссылки на нуль не будет влиять на поток, кроме того, что у него меньше ссылки, указывающей на него. И да, любой объект с активными ссылками, указывающими на него, не будет собирать мусор. Если вы хотите, чтобы поток имел право на GC (и, что еще более важно, прекратить делать вещи), то прерывайте то, что он делает:

someThread.interrupt();

из документов Oracle:

Прерывание - это указание на поток, что он должен остановить то, что он делает и делает что-то еще. Это решение программиста решить как поток реагирует на прерывание, но он очень распространен для завершения потока

Ответ 4

Поток будет запущен, его ссылка просто установлена ​​в нуль, и поэтому он не будет иметь права на GC.