Собственный поток уровня ОС освобождается, как только поток завершается (примерно, когда run()
заканчивается), но объект потока живет, как и любой другой объект, до тех пор, пока он не станет недоступным, и сборщик мусора не почувствует себя работающим.
Edit: Также было бы интересно узнать, что Thread
(в реализации Sun Oracle, в любом случае) имеет закрытый метод, вызываемый виртуальной машиной при выходе из потока, который агрессивно обнуляет несколько полей, включая поле, ссылающееся на Runnable
, установленное конструктором Thread(Runnable)
. Таким образом, даже если вы сохраните ссылку на Thread
, то вещи, которые ему не нужны после завершения выполнения, будут выпущены независимо от этого.