Удаляются ли потоки Java после их завершения? - PullRequest
12 голосов
/ 28 сентября 2010

Скажем, я порождаю поток каждые пару секунд, используя метод, описанный ниже, и каждый поток занимает около секунды для завершения. Готовые темы удаляются?

new Thread (new myRunnableClass()).start();

Ответы [ 3 ]

9 голосов
/ 28 сентября 2010

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

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

7 голосов
/ 28 сентября 2010

Я бы не назвал это удаленным. После завершения потока он переходит в мертвое состояние, готовясь к сборке мусора JVM.

2 голосов
/ 28 сентября 2010

Создание новой темы - довольно дорогой процесс.То, что вы хотите, это пул потоков.Есть разные способы сделать это - вот один .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...