Как запустить очистку со ссылкой на регистрируемый объект - PullRequest
0 голосов
/ 16 марта 2020

С java 9 мы наконец имеем Cleaner. Однако в документах специально указывается:

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

Регистрация ссылки на объект и соответствующего действия по очистке возвращает Cleanable. Наиболее эффективное использование - это явный вызов метода clean, когда объект закрыт или больше не нужен.

Действие очистки - это Runnable, который вызывается не более одного раза, когда объект становится фантомно достижимым, если он не был явно очищен.

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

К сожалению, это именно то, что мне нужно: действие, которое я хочу зарегистрировать, должно ссылаться на сам объект (обычно это не что иное, как вызов метода).

Поскольку это с Cleaner выглядит нереально, есть ли способ сделать это, используя Phantom или слабые / мягкие ссылки?

Я посмотрел на них, и они выглядят довольно сложными, поэтому, прежде чем тратить на них много времени, я хотел бы заранее знать, возможно ли что-то подобное

Ps: по-видимому, это выглядит как Фантомные ссылки теперь выполняются посмертно

...