【发布时间】:2012-01-26 10:31:15
【问题描述】:
我有一个对象Producer,它在内部启动一个线程来侦听一些网络事件,并且大多数时候阻塞receive() 方法。在这个 Producer 对象中,我有一个 WeakHashMap<Integer, Vector<IConsumer>> 包含 at 哈希映射,其中键是 Producer 可以产生的事件,值是已在这些事件上注册的消费者列表。
现在我有一个Main 对象,它构造了一些Manager。 Manager 构造一个Producer 和任意数量的ConcreteConsumers implements IConsumer。 Manager 包含对 Producer 和 ConcreteConsumers 的引用。
这是一个有效的构造吗,Vector<IConsumer> 在插入 WeakHashMap<Integer, Vector<IConsumer>> 后是否不符合 GC 条件,因为没有对实际向量的引用?仅直接引用Producer 和ConcreteConsumers。如果是这样,我该如何解决?
接下来发生的事情是Main 对象删除了对Manager 的引用,这应该会导致所有ConcreteConsumers 都符合GC 条件,这正是我想要的。
但是,我还希望实际的Producer 对象有资格进行 GC,并且此时内部线程停止执行。有关如何执行此操作的任何建议?
【问题讨论】:
-
你的map的key和value类型是什么? - "WeakHashMap 中的 entry 将在其 key 不再正常使用时自动删除。"
-
@HannoBinder:我忘了写hashmap的实际key,它是一个Integer,我更新了问题。
标签: java multithreading garbage-collection weak-references producer-consumer