Нет, Thread
, который не может быть собран сборщиком мусора до завершения основного потока ВМ (независимо от того, является ли поток ОС или нет) завершенным. Я не уверен в том, что Thread
, который не имеет каких-либо очевидных ссылок на него, но не был start()
, закончился тем, что вызвал утечку, или ее можно собрать - последнее, я бы ожидать.
Что касается вашего второго вопроса - ваш код расширяет , расширяет Thread
, используя анонимный внутренний класс, здесь:
new Thread() {
public void run() {
foo();
System.out.print(x + ", ");
}
}
Я бы лично предположил, что даже если вы действительно захотите использовать здесь анонимный внутренний класс, обычно лучше реализовать Runnable
:
new Thread(new Runnable() {
public void run() {
foo();
System.out.print(x + ", ");
}
})
Таким образом, ясно, что вы просто предоставляете что-то для запуска, а не пытаетесь изменить какое-либо поведение ядра потока.