Ho cercato di esaminare il codice sorgente di HashMap simultaneo per verificare come è implementato. A me sembrava molto difficile da capire ((In nessun modo sto dicendo che non è necessario :))). Ho pensato se ho bisogno di implementarlo da solo e come dovrei farlo. Ecco una breve panoramica al riguardo: -
1) Mantiene un elenco di 16 oggetti di default (predefinito) che estendono il blocco Reentrant.
2) Il blocco avrà lo stato (di tipo AtomicInteger) dire lockState che sarà 0 se non in uso. Se qualcuno ha acquisito il blocco, sarà 1
3) Prima di qualsiasi operazione di aggiornamento / creazione (ad esempio: - in operazione PUT), CMH vedrà se qualsiasi blocco nell'elenco è disponibile con lockState.compareAndSet (int 0, int 1) Se il risultato di compareAndSet è true allora acquisire il blocco
4) Una volta terminato, imposta nuovamente lockState su 0.
Questo è solo skelton e sapere che ci sarà molto spazio per l'ottimizzazione. Ma volevo solo confermare se sono su pista di scrittura o voi ragazzi vedete qualche grave difetto in esso? .