我正在寻找支持事件通知的并发映射,例如,我可以为特定键注册回调,这些键在放置或删除此类键时调用。整个事情不仅是原子的,而且与 ConcurrentHashMap 一样显示出良好的并发度。
我的第一次尝试是从 ConcurrentHashMap 中窃取基于段的解决方案,并将一些事件注册表添加到段类中。但事实证明,这比预期的要难。计算段偏移似乎不是那么简单。如果你不了解它是如何工作的(你错过了一些细节,你的东西最终会出现错误),那么从 ConcurrentHashMap 中窃取解决方案并不是那么容易。也许有人知道一些解释 ConcurrentHashMap 中的段解决方案如何工作的论文?比我能完成的工作。
在我的 map put 或 remove 方法中放置一个大的同步块很容易,这样监听器的 put 或 remove 和调用都发生在一个同步块中。但这最终会降低并发性,使解决方案成为一种具有单个段的 ConcurrentHashMap。
我希望有人知道某些地图或事件注册表实现可以执行我想要的操作,或者某些文件的链接解释了 COncurrentHashMap 中的这种分段算法是如何工作的。
谢谢,奥利弗