утечка памяти новой темы () и сбора мусора? - PullRequest
1 голос
/ 26 января 2012

У меня есть следующий код:

new Thread(new ThreadStart(delegate()
{
    // something short
})).Start();

Может ли сборщик мусора завершить этот экземпляр Thread, пока он находится в состоянии Stopped?

Время жизни этого потока:

  1. Before Started
  2. Running
  3. Stopped

Когда это Thread закончит свою работу, этобудет сборщиком мусора или они сохранят дескриптор этой нити для возможного перезапуска в будущем.

Ответы [ 2 ]

4 голосов
/ 26 января 2012

На экземпляр Thread система не ссылается после завершения потока.

Невозможно перезапустить остановленный экземпляр Thread.

2 голосов
/ 26 января 2012

Да. После того, как:

  1. Поток остановлен (например, возвращен вызванный делегат).
  2. Больше нет корневой ссылки на объект Thread.

Тогда его можно собрать. Однако вы не заметите, потому что в этот момент у вас нет ссылки на объект, через который он просматривается, в потоке, который он представляет, не выполняется код, и его никогда не будет.

Полагаю, у вас может быть WeakReference, в котором содержится ссылка на объект, и когда IsAlive был ложным, вы знали, что он был собран. Почему вы все равно?

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