Aquest article us presentarà un concepte anomenat Concurrent Hash Map In i feu-ne un seguiment amb una demostració pràctica. En aquest article es tractaran les següents indicacions,
- Com funciona ConcurrentHashMap internament?
- Per què un altre mapa?
- Com és diferent?
- Diferència entre ConcurrentHashMap i HashMap
- Trampes
Continuem amb aquest article sobre el mapa hash simultani a Java
com fer un doble a un int a java
Com funciona ConcurrentHashMap internament?
A partir de Java 5, ConcurrentHashMap s'introdueix com a alternativa per a HashTable. També podem obtenir un mapa sincronitzat mitjançant el mètode de classe d’utilitat anomenat synchronizedMap (), però hi ha un inconvenient, és a dir, un rendiment molt baix, ja que només hi pot accedir un únic fil alhora. Per tant, ConcurrentHashMap tracta aquests problemes.
Continuem amb aquest article sobre el mapa hash simultani a Java
Per què un altre mapa?
Tot i que ja tenim HashMap, HashTable és el que és una necessitat de ConcurrentHashMap, és perquè proporciona un millor rendiment al mateix temps que és segur per a fils.
Continuem amb aquest article sobre el mapa hash simultani a Java
Com és diferent?
També es basa en el hash, però el seu rendiment es millora gràcies a la seva estratègia de bloqueig. A diferència de HashTable o HashMap sincronitzat, no aplica el mateix bloqueig a cada mètode, sinó que utilitza un bloqueig independent per a cada mètode. Utilitza un bloqueig de reentrada per a aquesta finalitat. Similar a HashMap, ConcurrentHashMap té 16 compartiments, és a dir, segments, per crear ConcurrentHashMap amb més de 16 compartiments, té diferents constructors.
Abans de parlar en detall, revisem alguns conceptes a continuació:
ConcurrentHashMap: aquest mapa permet l'accés de fils simultanis. Només es bloqueja una part del mapa anomenat segment, és a dir, l’estructura de dades subjacent, mentre s’afegeix o s’actualitza el mapa. Permet l'accés de fils simultanis per llegir les dades sense bloquejar-los. Es va introduir per millorar el rendiment.
- Nivell de simultaneïtat: és un nombre que és un nombre estimat de fils actualitzats simultàniament.
- Factor de càrrega: és un valor que s’utilitza per controlar el factor de canvi de mida.
- Capacitat inicial: és una propietat que crea un mapa amb la mida proporcionada.
Vegem el diagrama següent i intentem entendre com funciona ConcurrentHashMap.
Així doncs, al diagrama anterior, tenim 16 panys que només bloquegen una part del mapa necessària perquè altres fils puguin accedir a diferents fils millorant així el rendiment.
De manera similar a HashMap, ConcurrentHashMap funciona de manera similar: conté 16 segments per defecte i emmagatzema els elements mitjançant un hash, de manera que si els elements tenen el mateix hash, s’emmagatzemen al mateix segment que es mostra al diagrama anterior amb l’ajut de la llista enllaçada.
Continuem amb aquest article sobre el mapa hash simultani a Java
Diferència entre ConcurrentHashMap i HashMap
HashMap pertany a les col·leccions mentre que ConcurrentHashMap pertany a les col·leccions simultànies, però hi ha moltes altres diferències entre elles.
- ConcurrentHashMap ésFils de seguretat, és a dirsincronitzat però HashMap no està sincronitzat.
- ConcurrentHashMap té un rendiment baix perquè està sincronitzat perquè de vegades els fils han d’esperar, però HashMap té un rendiment elevat perquè no està sincronitzat i tots els fils hi poden accedir simultàniament.
Obtindrem ConcurrentModificationException si dos fils intenten modificar o afegir contingut d’Objecte simultàniament. Tot i això, en el cas de ConcurrentHashMap no obtindrem cap excepció mentre realitzem la mateixa operació.
Es permeten valors nuls per a la clau i els valors a HashMap, però, ConcurrentHashMap no permet valors nuls per a la clau i el valor que va intentar afegir valor nul obtindrem excepció, és a dir, NullPointerException.
HashMap s’introdueix a JDK 1.2 mentre que ConcurrentHashMap s’introdueix a JDK 1.5.
Com hem vist anteriorment per obtenir un millor rendiment, consisteix en una sèrie de nodes com a cubs de taula que eren segments de taula anteriors Java 8 .
Els cubs s’inicialitzen mandrosament quan es realitza la primera inserció. Tots els dipòsits es poden bloquejar de manera independent bloquejant el primer node del dipòsit i les operacions de lectura no es bloquegen.
Comparat amb HashMap, ConcurrentHashMap proporciona l’extra concurrencyLevel argument per controlar el nombre de fils estimats a utilitzar.
Constructors:
ConcurrentHashMap m = new ConcurrentHashMap ()
Es crea un nou mapa buit amb una capacitat inicial predeterminada de 16, un factor de càrrega de 0,75 i un nivell de simultaneïtat 16.
ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity)
Es crea un nou mapa buit amb una capacitat inicial especificada, un factor de càrrega de 0,75 i un nivell de simultaneïtat 16.ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity, float loadFactor)
Es crea un nou mapa buit amb una capacitat inicial i un factor de càrrega especificats amb el nivell de simultaneïtat 16.
ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel)
Es crea un nou mapa buit amb una capacitat inicial, un factor de càrrega i un nivell de concurrència especificats.ConcurrentHashMap m = new ConcurrentHashMap (Mapa m)
Crea un nou ConcurrentHashMap a partir del mapa proporcionat.
Els altres dos arguments: initialCapacity i loadFactor funcionaven de la mateixa manera que HashMap.
ConcurrentMap és compatible amb la memòria en operacions de clau / valor en un entorn multi-threaded.
què és l'agregació a Java
Continuem amb aquest article sobre el mapa hash simultani a Java
Trampes
Mentre es recuperen objectes, ConcurrentHashMap no està bloquejat i pot coincidir amb les operacions d’actualització, per tant, per obtenir un millor rendiment, només recuperaran les operacions d’actualització completades més recentment.
Els resultats dels mètodes d’estat agregat, inclosos size, isEmpty i containsValue, solen ser útils només quan un mapa no s’està actualitzant simultàniament en altres fils.
Si les actualitzacions simultànies es controlen correctament, aquests mètodes d'estat poden ser fiables.
Tot i que aquests mètodes no es garanteixen en temps real.
La capacitat per defecte de la taula és 16, però podem canviar-la mitjançant el nivell de simultaneïtat.
public ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel) {// ... if (initialCapacitySi cal que les claus de claus estiguin ordenades, podem utilitzar ConcurrentSkipListMap.
Ara, després d'executar el programa anterior, hauríeu entès el mapa hash simultani a Java. Així hem arribat al final d’aquest article sobre Si voleu obtenir més informació, consulteu el , una empresa d'aprenentatge en línia de confiança. El curs de formació i certificació Java J2EE i SOA d’Edureka està dissenyat per formar-vos tant per a conceptes bàsics com avançats de Java, juntament amb diversos marcs Java com Hibernate & Spring
Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris d’aquest article i us respondrem el més aviat possible.