我有一个对象Producer
,它在内部启动一个线程,该线程将侦听一些网络事件,并且在大多数情况下阻塞receive()
方法。在这个Producer
对象中,我有一个包含散列映射的WeakHashMap<Integer, Vector<IConsumer>>
,其中键是Producer
可以产生的事件,值是在这些事件上注册的消费者列表。
现在我有一个Main
对象,它构造了一些Manager
。CCD_ 8构造一个单独的CCD_ 9和任意数量的ConcreteConsumers implements IConsumer
。Manager
包含对Producer
和ConcreteConsumer
的引用。
这是一个有效的构造吗?Vector<IConsumer>
在插入WeakHashMap<Integer, Vector<IConsumer>>
后是否没有资格立即进行GC,因为没有引用实际矢量?只有对Producer
和ConcreteConsumer
的直接引用。如果是,我该如何解决
接下来,Main
对象将放弃对Manager
的引用,这将导致所有ConcreteConsumers
都有资格进行GC,这正是我想要的。
但是,我还希望实际的Producer
对象符合GC的条件,并且内部线程此时停止执行。有什么建议吗
它是WeakHashMap
中具有弱引用的键。该值被强烈引用。在没有对密钥的强引用(在本例中为Integer
)后,该条目将被删除一段时间。这是Integer
的同一个实例,而不仅仅是具有相同值的实例。值类型作为WeakHashMap
的键并不是特别有用。
(WeakHashMap
作为缓存并不有用(您希望使用SoftReference
,可能还有其他人的库)。)