我在某篇文章中读到了一篇关于向WeakReference对象添加一些回调的文章,这些回调将在垃圾回收时触发。现在,没有我搜索多少,我找不到它。
每当弱引用对象被销毁时,我需要一种方法来执行一些代码。我知道它可以完成,我只是不记得我是否需要WeakReference或其他类似WeakHasMap的东西?
答案 0 :(得分:3)
使用ReferenceQueue
来实现这一目标。您可能也想查看PhantomReference
s,具体取决于您实际尝试做什么(但WeakReference
也可以使用队列)。只需创建一个引用队列并将其作为第二个参数传递给reference-constructor。当GC删除对象时,引用会排队,您可以使用队列中的remove()
(阻止)或poll()
(非阻塞)来获取它。
还有另一种选择:实施finalize
。它虽然不那么灵活,但也在另一个线程中运行(所以你仍然有并发性 - 加上甚至不知道哪个线程会执行它)。 ReferenceQueue在所有方面都是优秀的。