我正在尋找支持事件通知的併發地圖,例如我可以註冊一個特定鍵的回調函數,這些鍵是在這個鍵上放置或刪除時調用的。而且,事情不僅是原子性的,而且與ConcurrentHashMap一樣,也表現出了很好的併發性。尋找支持事件的併發地圖
我的第一個嘗試是從ConcurrentHashMap中竊取基於分段的解決方案,並將一些事件註冊表添加到分段類中。但結果比預期的要難。計算段偏移似乎不是那麼簡單。從ConcurrentHashMap中竊取解決方案並不是那麼容易,如果你不明白它是如何工作的(你錯過了一些細節,並且你的東西最終變成了bug)。也許有人知道一些論文解釋了ConcurrentHashMap中的分段解決方案是如何工作的?比我能通過我的方式工作。
只需在我的地圖放置或移除方法中放置一個大的同步塊,以便放入或移除和調用偵聽器都發生在一個同步塊中很容易。但是,這最終會降低併發性,因爲解決方案只是一種具有單個段的ConcurrentHashMap。
我希望有人知道一些地圖或事件註冊表的實現,它可以做我想做的事情,或者鏈接到一些論文,解釋COncurrentHashMap中這種分段算法是如何工作的。
感謝,奧利弗
想想我現在發現了一些有用的東西:http://www.java2s.com/Code/Java/Collections-Data-Structure/AversionofHashtablesupportingconcurrencyforbothretrievalsandupdates.htm這個細分市場解決方案非常簡單,可能足以滿足我的需求。 – OlliP
這會有幫助嗎? http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ForwardingConcurrentMap.html – artfullyContrived
謝謝,從我可以看到這張地圖不允許放置/刪除回調監聽器被添加。 – OlliP