Jak najlepiej zaimplementować współbieżną mapę skrótów w Javie?



Ten artykuł wprowadzi Cię w koncepcję zwaną Concurrent Hash Map In Java i uzupełni ją praktyczną demonstracją

Ten artykuł wprowadzi Cię w koncepcję zwaną Concurrent Hash Map In a następnie praktyczną demonstrację. W tym artykule zostaną omówione następujące wskazówki:

Przechodząc do tego artykułu na temat mapy współbieżnych skrótów w Javie





Jak ConcurrentHashMap działa wewnętrznie?

Począwszy od języka Java 5, ConcurrentHashMap jest wprowadzany jako alternatywa dla HashTable. Możemy również uzyskać zsynchronizowaną mapę za pomocą metody klasy narzędzi o nazwie synchronizedMap (), ale ma ona wadę, tj. Bardzo niską wydajność, ponieważ tylko jeden wątek może uzyskać do niej dostęp w jednym czasie. Dlatego ConcurrentHashMap rozwiązuje te problemy.



Przechodząc do tego artykułu na temat mapy współbieżnych skrótów w Javie

Dlaczego inna mapa?

Mimo że mamy już HashMap, HashTable to czego potrzeba ConcurrentHashMap, to dlatego, że zapewnia lepszą wydajność, a jednocześnie jest bezpieczny dla wątków.

Przechodząc do tego artykułu na temat mapy współbieżnych skrótów w Javie



Jak to się różni?

Jest również oparty na haszowaniu, ale jego wydajność poprawia się dzięki strategii blokowania. W przeciwieństwie do HashTable lub Synchronized HashMap, nie nakłada tej samej blokady na każdą metodę, używa oddzielnej blokady dla każdej metody, używa do tego celu blokady ponownego wejścia. Podobnie jak HashMap, ConcurrentHashMap ma 16 segmentów, czyli segmentów, aby utworzyć ConcurrentHashMap z więcej niż 16 zasobnikami, ma różne konstruktory.

Zanim omówimy szczegółowo, przeanalizujmy kilka poniższych pojęć:

ConcurrentHashMap: ta mapa umożliwia jednoczesny dostęp do wątku. Tylko część mapy zwana segmentem, tj. Podstawowa struktura danych jest blokowana podczas dodawania lub aktualizowania mapy. Umożliwia równoczesny dostęp do wątków w celu odczytu danych bez blokowania. Został wprowadzony w celu poprawy wydajności.

  • Poziom współbieżności: jest to liczba, która jest szacowaną liczbą współbieżnie aktualizowanych wątków.
  • Współczynnik obciążenia: Jest to wartość, która służy do kontrolowania współczynnika zmiany rozmiaru.
  • Pojemność początkowa: jest to właściwość, która tworzy mapę o podanym rozmiarze.

Zobaczmy poniższy diagram i spróbujmy zrozumieć, jak działa ConcurrentHashMap.

c ++ sortuj tablicę int

Obraz - Concurrent Hashmap - Edureka

Tak więc na powyższym diagramie mamy 16 blokad, które blokują tylko część mapy, która jest wymagana, aby inne metody były dostępne dla różnych wątków, co poprawia wydajność.

Podobnie jak HashMap, ConcurrentHashMap działa w podobny sposób, domyślnie zawiera 16 segmentów i przechowuje elementy przez haszowanie, więc jeśli elementy mają ten sam hash, są przechowywane w tym samym segmencie, jak pokazano na powyższym diagramie za pomocą połączonej listy.

Przechodząc do tego artykułu na temat mapy współbieżnych skrótów w Javie

Różnica między ConcurrentHashMap i HashMap

HashMap należy do kolekcji, podczas gdy ConcurrentHashMap należy do kolekcji współbieżnych, jednak istnieje wiele innych różnic między nimi.

  • ConcurrentHashMap toBezpieczny wątkowo, tjzsynchronizowane, ale HashMap nie jest zsynchronizowany.
  • ConcurrentHashMap ma niską wydajność, ponieważ jest zsynchronizowany, ponieważ czasami wątki muszą czekać, ale HashMap ma wysoką wydajność, ponieważ nie jest zsynchronizowany i wszystkie wątki mogą uzyskać do niego jednocześnie dostęp.
  • Otrzymamy ConcurrentModificationException, jeśli dwa wątki jednocześnie próbują modyfikować lub dodawać zawartość Object. Jednak w przypadku ConcurrentHashMap nie otrzymamy żadnego wyjątku podczas wykonywania tej samej operacji.

  • Wartości null są dozwolone dla klucza i wartości w HashMap, jednak ConcurrentHashMap nie zezwala na wartości null dla klucza i wartości, gdy próbował dodać wartość null, otrzymamy wyjątek, tj. NullPointerException.

  • HashMap został wprowadzony w JDK 1.2, natomiast ConcurrentHashMap został wprowadzony w JDK 1.5.

Jak widzieliśmy wcześniej dla lepszej wydajności, składa się z tablicy węzłów jako segmentów tabeli, które wcześniej były segmentami tabeli Java 8 .

Pojemniki są inicjalizowane leniwie podczas pierwszego wstawiania. Każdy zasobnik można zablokować niezależnie, blokując pierwszy węzeł zasobnika, również operacje odczytu nie są blokowane.

W porównaniu do HashMap, ConcurrentHashMap zapewnia dodatkowe concurrencyLevel argument do kontrolowania liczby szacowanych wątków do użycia.

Konstruktorzy:

  1. ConcurrentHashMap m = new ConcurrentHashMap ()

    Zostanie utworzona nowa pusta mapa z domyślną pojemnością początkową 16, współczynnikiem obciążenia 0,75 i poziomem współbieżności 16.

  2. ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity)
    Zostanie utworzona nowa pusta mapa z określoną pojemnością początkową, współczynnikiem obciążenia 0,75 i poziomem współbieżności 16.

    przekonwertować na binarny w Pythonie
  3. ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity, float loadFactor)

    Zostanie utworzona nowa pusta mapa z określoną pojemnością początkową i współczynnikiem obciążenia z poziomem współbieżności 16.

    jaka jest różnica między jquery a javascript
  4. ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel)
    Tworzona jest nowa pusta mapa z określoną pojemnością początkową, współczynnikiem obciążenia i poziomem współbieżności.

  5. ConcurrentHashMap m = nowy ConcurrentHashMap (mapa m)
    Tworzy nową ConcurrentHashMap z dostarczonej mapy.

Pozostałe dwa argumenty: initialCapacity i loadFactor działały tak samo jak HashMap.
ConcurrentMap jest spójna z pamięcią w operacjach klucz / wartość w środowisku wielowątkowym.

Przechodząc do tego artykułu na temat mapy współbieżnych skrótów w Javie

Pułapki

Podczas pobierania obiektów ConcurrentHashMap nie jest blokowany i może nakładać się na operacje aktualizacji, dlatego dla lepszej wydajności pobierają tylko ostatnio zakończone operacje aktualizacji.

Wyniki metod stanu zagregowanego, w tym size, isEmpty i containsValue, są zwykle przydatne tylko wtedy, gdy mapa nie jest poddawana równoczesnym aktualizacjom w innych wątkach.

Jeśli równoległe aktualizacje są prawidłowo kontrolowane, te metody stanu mogą być niezawodne.

Chociaż te metody nie gwarantują w czasie rzeczywistym.

Domyślna pojemność tabeli to 16, ale możemy ją zmienić za pomocą poziomu współbieżności.

public ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel) {// ... if (initialCapacity

Jeśli klucze muszą być posortowane, możemy użyć ConcurrentSkipListMap.

Teraz po wykonaniu powyższego programu zrozumiałbyś mapę Concurrent Hash w Javie. W ten sposób doszliśmy do końca tego artykułu. Jeśli chcesz dowiedzieć się więcej, zapoznaj się z , zaufana firma zajmująca się edukacją online. Szkolenie i certyfikacja J2EE i SOA firmy Edureka ma na celu przeszkolenie zarówno podstawowych, jak i zaawansowanych koncepcji języka Java, a także różnych struktur Java, takich jak Hibernate i Spring.

Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy w tym artykule, a skontaktujemy się z Tobą tak szybko, jak to możliwe.