2015-11-20 2 views
3

У меня есть Java-класс, для которого требуется параллельный запуск монитора при создании экземпляра. Я хочу, чтобы этот монитор работал, пока экземпляр больше не работает, или на него не ссылаются. Обычно я использую активный флаг как переменную, которая закрывается, когда класс выключается/закрывается, однако это нужно тщательно контролировать, и его нужно вызывать при закрытии. Мне также известно о члене finalize объекта, но, насколько я помню, небезопасно использовать его или для этого? Кроме того, монитор, возможно, имеет круговые ссылки на контролируемый объект, но это может быть другой проблемой.Запускать thread до тех пор, пока объект/родительский не разыменован

ответ

3

Вам может понравиться объект, который будет контролироваться в потоке, используя WeakReference. Это позволяет сборщику мусора собирать и уничтожать объект. В потоке вам нужно будет проверять каждый раз, если ссылочный объект все еще существует каждый раз, когда вы выполняете свои проверки. Если он больше не существует, вы можете спокойно выйти из потока.

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

+0

Где неизвестный временной интервал может быть «никогда». – Voo

+0

«Никогда», иначе «до сбора мусора» является приемлемым/прекрасным со мной в этом контексте. Спасибо за быстрый ответ. – Thomas

Смежные вопросы