【发布时间】:2012-10-06 05:37:18
【问题描述】:
我正在寻找支持事件通知的并发地图,例如我可以为在 put 或 remove 上调用的特定键注册回调。整个事情不仅是原子的,而且与 ConcurrentHashMap 一样显示出良好的并发度。
我的第一次尝试是从 ConcurrentHashMap 中窃取基于段的解决方案,并将一些事件注册表添加到段类中。但事实证明,这比预期的要难。计算段偏移似乎不是那么简单。如果您不了解它是如何工作的(您错过了一些细节并且您的东西最终会出现错误),那么仅仅从 ConcurrentHashMap 中窃取解决方案并不是那么容易。也许有人知道一些解释 ConcurrentHashMap 中的段解决方案如何工作的论文?比我能完成的工作。
在我的 map put 或 remove 方法中放置一个大的同步块很容易,这样监听器的 put 或 remove 和调用都发生在一个同步块中。但这最终会降低并发性,使解决方案成为一种具有单个段的 ConcurrentHashMap。
我希望有人知道一些地图或事件注册表实现可以做我想要的,或者一些论文的链接解释了 COncurrentHashMap 中的这种分割算法是如何工作的。
谢谢,奥利弗
【问题讨论】:
-
我觉得我现在找到了一些有用的东西:java2s.com/Code/Java/Collections-Data-Structure/… 那里的段解决方案非常简单,可能足以满足我的目的。
-
谢谢,据我所知,这张地图不允许添加 put/remove 回调监听器。
标签: java concurrency map event-handling