Algoritmo per creare ConcurrentHashMap personalizzato?

0

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? .

    
posta M Sach 28.10.2014 - 12:01
fonte

1 risposta

1

ConcurrentHashMap non usa affatto% istanze diLock. Utilizza direttamente la classe Unsafe che chiama direttamente le istruzioni del processore (come compareAndSet o volatile read). Ciò significa che è molto più veloce che con Lock .

Ciò che puoi fare è utilizzare ReadWriteLock anziché ReentrantLock per avere prestazioni migliori durante la lettura.

    
risposta data 28.10.2014 - 12:13
fonte

Leggi altre domande sui tag