Java guruConcurrentHashMap vs ReentrantReadWriteLock opartej własną mapę do przeładunku
Obecnie mamy HashMap<String,SomeApplicationObject>
który jest czytać często i modyfikowane sporadycznie a my mamy problemy, które w trakcie modyfikacji/przeładunek, Czytaj zwrotów pracy null
co jest niedopuszczalne.
Aby rozwiązać ten problem mam następujące opcje:
A. Użyj ConcurrentHashMap
Która wygląda pierwszy wybór, ale działania, które mówimy o to reload()
- oznacza clear()
następnie replaceAll()
. Więc jeśli Map
jest czytany po clear()
i pre replaceAll()
, zwraca null, co nie jest pożądane. Nawet jeśli I synchronize
to nie rozwiąże problemu.
B. Utwórz kolejną realizację w oparciu ReentrantReadWriteLock
Gdzie mogę tworzyć posiadły Write Lock
przed reload()
operacji. Wydaje się to bardziej odpowiednie, ale wydaje mi się, że musi istnieć coś, co jest już do tego dostępne i nie muszę wymyślać koła.
Jakie jest najlepsze wyjście?
EDIT Czy jakakolwiek kolekcja jest już dostępna z taką funkcją?
Twoje mapy są praktycznie niezmienne, co czyni je idealnym celem do publikowania za pomocą 'volatile'. –
** Efektywnie niezmienny ** przepraszam Nie rozumiem 'niezmiennego' tak dobrze ... Czy mógłbyś podać jakieś wskazówki ??? – SiB