Java Guru,ConcurrentHashMap vs ReentrantReadWriteLock basato mappa personalizzata per la ricarica
Attualmente abbiamo un HashMap<String,SomeApplicationObject>
che viene Leggi frequenti e modificato di tanto in tanto e stiamo avendo problemi che durante la modifica/ricarico, Leggi rendimenti di funzionamento null
che non è accettabile.
Per correggere questo devo seguenti opzioni:
A. Utilizzare ConcurrentHashMap
che si presenta come la prima scelta, ma l'operazione di cui stiamo parlando è reload()
- significa clear()
seguiti da replaceAll()
. Quindi se Map
viene letto post clear()
e pre replaceAll()
restituisce null che non è desiderabile. Anche se I synchronize
questo non risolve il problema.
B. Creare un'altra implementazione basata su ReentrantReadWriteLock
Dove vorrei creare acquisiscono Write Lock
prima reload()
operazione. Questo sembra più appropriato ma sento che ci deve essere qualcosa già disponibile per questo e non ho bisogno di reinventare la ruota.
Qual è la migliore uscita?
EDIT È già disponibile una raccolta con tale funzione?
Le tue mappe sono effettivamente immutabili, il che le rende un obiettivo perfetto per la pubblicazione tramite 'volatile'. –
** In modo immutabile ** scusate non capisco immutabile 'bene ... Potreste fornire qualche suggerimento ??? – SiB