在我的程序中,当对象仅在弱引用上可用时,可能会出现这种情况。我注意到一些NullPointerExceptions,它们不容易调试。我想知道,当用户线程执行其方法或通过硬引用到达时,一旦对象被标记为弱可达性,就有可能再次变硬。互联网上的各种论坛都表示我们可以恢复硬性参考,考虑到软/弱,但我想知道为什么SPEC is so specific then
可达性
从最强到最弱,可达性的不同程度 反映物体的生命周期。它们在操作上被定义为 如下所示:如果......对象轻柔,则可以强烈访问对象 如果......物体可以到达......
我不应该将lifecycle
读作单向瀑布模型吗?如果一个对象在弱一段时间内被恢复,它可以多次出现在WeakRefQueue中吗?我在ID请求对象时使用弱引用来恢复硬引用,但也将它们放入引用队列以确定客户端是否仍在使用该对象,如果没有则进行一些清理。这一切都在一个线程中完成,但我问自己这是否会造成任何问题。
答案 0 :(得分:1)
如果可以通过强引用访问对象,则强烈引用该对象。没有什么比这更神奇了。这意味着对象可以具有多个强引用,多个软引用和多个弱引用,或任何组合。
唯一的区别是通过WeakReference
的引用不算作强引用。如果引用仍然可用,您可以从这样的弱引用中获得强引用。
WeakReference<MyType> ref = ...
MyType stringRef = ref.get();
所有这一切都是复制参考,没有其他需要发生。