gpt4 book ai didi

java - 寻找并发 map 支持事件

转载 作者:行者123 更新时间:2023-12-03 10:41:01 27 4
gpt4 key购买 nike

我正在寻找支持事件通知的并发映射,例如我可以为在此类键上放置或删除时调用的特定键注册回调。整个事情不仅是原子的,而且与 ConcurrentHashMap 一样显示出良好的并发度。

我的第一次尝试是从 ConcurrentHashMap 窃取基于段的解决方案,并向段类添加一些事件注册表。但事实证明,这比预期的要难。计算段偏移量似乎并不那么简单。如果您不了解它的工作原理,那么仅仅从 ConcurrentHashMap 窃取解决方案并不是那么容易(您会错过一些细节并且您的东西最终会出现错误)。也许有人知道一些解释 ConcurrentHashMap 中的段解决方案如何工作的论文?超出我的工作范围。

在我的映射放置或删除方法中放置一个大的同步块(synchronized block)很容易,这样放置或删除以及监听器的调用都发生在一个同步块(synchronized block)中。但这最终会降低并发性,使解决方案成为一种具有单个段的 ConcurrentHashMap。

我希望有人知道某些映射或事件注册表实现可以满足我的要求,或者某些论文的链接解释了 COncurrentHashMap 中的这种分段算法是如何工作的。

谢谢,奥利弗

最佳答案

最直接的解决方案是拦截对 ConcurrentHashMap 的调用,以获取您注册的事件的通知。一种方法是继承 ConcurrentHashMap,如下例所示:

class ConcurrentHashMapWithEvent<K, V> extends ConcurrentHashMap<K, V> {
...
@Override public V put(K key, V value) {
System.out.println("This is right before put(" + k + ", " + v + ")");
super.put(k, v);
System.out.println("This is right after put(" + k + ", " + v + ")");
}
...
public void registerCallback(EventCondition cond, Callback callback) { ... }
}

代替 println,您将有一些逻辑来检查 kv、 map 的状态或其他任何东西是否匹配一些EventCondition,并启动相应的回调。

这种模式,即拦截方法调用以在之前和之后执行一些代码,称为Aspect Oriented Programming .

关于java - 寻找并发 map 支持事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12909300/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com