Ho una mappa sincronizzata (tramite Collections.synchronizedMap()
) che viene letta e aggiornata da Thread A. Il thread B accede alla mappa solo tramite Map.keySet()
(sola lettura).Come sincronizzare la mappa tra un filo in bianco e nero e un thread di sola lettura?
Come devo sincronizzare questo? Il docs say keySet() (per una Collections.synchronizedMap) "Non è necessario essere nel blocco sincronizzato". Posso inserire l'accesso in lettura/scrittura del thread A all'interno di un blocco sincronizzato, ma è anche necessario?
Credo che sembra strano per me usare anche una mappa sincronizzato, o di un blocco sincronizzato, se Map.keySet non ha bisogno di essere sincronizzati (in base al collegamento docs sopra) ...
Aggiornamento: Mi sono perso l'iterazione del keySet che deve essere sincronizzato, anche se il recupero del keySet non richiede la sincronizzazione. Non particolarmente eccitante avere il keySet senza poterlo guardare, quindi risultato finale = sincronizzazione richiesta. Invece di usare ConcurrentHashMap.
si tratta di java3D? –
@ tuğrulbüyükışık no. Domanda di concorrenza generale di Java. – ericsoco