В коде метода start у класса Thread, текущий поток добавляет себя в группу. На каком этапе объект Thread'а будет удален из группы и собран GC
В классе Thread
есть приватный метод под названием exit()
в его доке написано следующее:
/**
* This method is called by the system to give a Thread
* a chance to clean up before it actually exits.
*/
private void exit() {
при корректном завершении потока (если на процессе не был вызвал kill -9
, например) будет вызван метод exit()
. Я не могу сказать как узнать когда именно он будет вызван, но явно после того как завершится runnable, который ему передан и перед сменой статуса потока в TERMINATED
. Как раз в этом методе, если thread принадлежит какой-либо группе, вызывается group.threadTerminated()
(хотя он на самом деле еще не Terminated :)) у своей группы, тем самым удаляясь из нее.
Есть еще один вариант, когда идет удаление из группы - когда поток не смог создаться в недрах операционки по каким-либо причинам (тут стоит заметить, что при вызове конструктора создание потока на самом деле не происходит, поток создается лишь при вызове метода start())
.
Thread, как и любой другой объект будет удален из памяти тогда, когда исчезнут все ссылки на него. Когда вы дергаете метод start()
JVM запоминает ссылку. И потом после завершения потока чистит эту ссылку (при этом если вы сохранили к себе куда-то поток, то он так и будет висеть в памяти в состоянии Terminated). Если честно, то механику отслеживания потока внутри JVM я не знаю, но могу грубо предположить, что есть массив с запущенными потоками и каждый поток удаляет себя из этого массива перед завершением (это нужно для ожидания всех поток не демонов перед выходом). Уточню, что речь именно об объекте класса Thread. Поток, который выделяется операционной системой исчезнет как только закончится его исполняемый код (по-сути когда закончится метод run()
).
А зачем вы вообще поинтересовались ThreadGroup? Еще Joshua Bloch в 2002 писал в Effective Java, что в своих приложениях незачем использовать ThreadGroup и ожиданий ThreadGroup не оправдал.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я новичок в nodejs, хочу запустить простой чат с помощью сервиса heroku и библиотеки socket
Здраствуйте! Пишу сайт по продаже косметики для портфолиоСам сайт написан полностью на чистом javascript