自Java 9开始,我们终于有了Cleaner
。但是在docs中是专门声明的:
每个清洁器独立运行,管理未决的清洁动作,并在不再使用清洁器时处理穿线和终止情况。
注册对象引用和相应的清理操作将返回Cleanable。最有效的用法是在关闭或不再需要该对象时显式调用clean方法。
清理动作是一个Runnable,除非对象已被明确清理,否则当对象变为幻影可到达对象时,该动作最多可调用一次。
请注意,清洁操作不得引用正在注册的对象。如果是这样,则该对象将不会成为幻像可访问对象,并且清洁操作将不会自动调用。
不幸的是,这正是我所需要的:我要注册的动作需要引用对象本身(通常再调用一个方法也没什么)。
由于使用Cleaner看起来不可能,是否有办法使用幻影或弱/软引用来做到这一点?
我看了看它们,它们看上去相当复杂,因此在花大量时间认真研究它们之前,我想提前知道是否有可能实现这种目的
Ps:看来Phantom references现在已经验尸了