Secondo documenti ConcurrentHashMap Oracle,
Il costruttore di ConcurrentHashMap assomiglia a questo:
ConcurrentHashMap pubblico (int initialCapacity, galleggiare loadFactor, int concurrencyLevel)
Così la linea di cui sopra crea una nuova mappa vuota con la capacità iniziale specificata, il fattore di carico e il livello di concorrenza. dove, Parametri importanti da prendere in considerazione da ConcurrentHashMap Costruttore:
- initialCapacity - la capacità iniziale. L'implementazione esegue il dimensionamento interno per contenere questo numero di elementi.
- concurrencyLevel - il numero stimato di thread di aggiornamento simultaneo. L'implementazione esegue il dimensionamento interno per provare ad adattare questo numero di thread .
Nell'Api di ConcurrentHashMap, troverete le seguenti costanti.
- statico finale int DEFAULT_INITIAL_CAPACITY = 16;
- statico finale int DEFAULT_CONCURRENCY_LEVEL = 16;
I parametri del parametro di capacità iniziale e del livello di concorrenza del costruttore ConcurrentHashMap (o Object) sono impostati su 16 per impostazione predefinita.
Quindi, anziché un blocco di mappa, ConcurrentHashMap mantiene un elenco di 16 blocchi di default (numero di blocchi uguale alla capacità iniziale, che per impostazione predefinita è 16) ciascuno dei quali viene utilizzato per bloccare un singolo bucket di la Map.This indica che 16 thread (numero di thread uguale al livello di concorrenza, che per default è 16) possono modificare la collezione allo stesso tempo, dato, ogni thread funziona su bucket differenti. Quindi, a differenza di hashtable, eseguiamo qualsiasi tipo di operazione (aggiornamento, eliminazione, lettura, creazione) senza bloccare l'intera mappa in ConcurrentHashMap.
Le operazioni di recupero (incluso get) in genere non bloccano. In questo caso utilizza il concetto di volatile., quindi potrebbe sovrapporsi alle operazioni di aggiornamento (incluse le operazioni di inserimento e rimozione). Recuperati riflettono i risultati delle operazioni di aggiornamento completate più recentemente che mantengono il loro esordio.
La concomitanza consentita tra le operazioni di aggiornamento è guidata dall'argomento facoltativo concurrencyLevel del costruttore (predefinito 16), che viene utilizzato come suggerimento per il dimensionamento interno. La tabella è partizionata internamente per cercare di consentire il numero indicato di aggiornamenti simultanei senza contesa. Poiché il posizionamento nelle tabelle hash è essenzialmente casuale, la concorrenza effettiva varierà. Idealmente, dovresti scegliere un valore per accogliere tutti i thread che modificheranno contemporaneamente la tabella. L'utilizzo di un valore significativamente superiore a quello necessario può sprecare spazio e tempo e un valore significativamente inferiore può portare a conflitti di thread.
Spero che aiuti!
hi..haightighted le domande –
Quindi cosa intendi tra ConcurrentHashMap e ReadWriteLock? –