Как най-добре да се внедри едновременна хеш карта в Java?



Тази статия ще ви запознае с концепция, наречена Concurrent Hash Map в Java, и ще я последва с практическа демонстрация

Тази статия ще ви запознае с концепция, наречена Concurrent Hash Map In и го проследете с практическа демонстрация. Следващите указатели ще бъдат разгледани в тази статия,

Продължавайки с тази статия за Concurrent Hash Map в Java





Как работи ConcurrentHashMap вътрешно?

От Java 5 нататък ConcurrentHashMap се въвежда като алтернатива на HashTable. Можем да получим и Синхронизирана карта, използвайки метода на помощния клас, наречен синхронизиранМап (), но има недостатък на този метод, т.е. много лоша производителност, тъй като само една нишка може да има достъп до него наведнъж. Така че ConcurrentHashMap разглежда тези проблеми.



Продължавайки с тази статия за Concurrent Hash Map в Java

Защо друга карта?

Въпреки че вече имаме HashMap, HashTable тогава какво е необходимо на ConcurrentHashMap, това е така, защото осигурява по-добра производителност и същевременно е безопасно за нишки.

пример за извикване на отдалечен метод

Продължавайки с тази статия за Concurrent Hash Map в Java



Как е различно?

Той също се основава на хеширане, но ефективността му се подобрява от стратегията му за заключване. За разлика от HashTable или Synchronized HashMap, той не прилага една и съща ключалка за всеки метод, използва отделна ключалка за всеки метод, за тази цел използва заключване за повторно влизане. Подобно на HashMap, ConcurrentHashMap има 16 сегмента, т.е. сегменти, за да създаде ConcurrentHashMap с повече от 16 сегмента, той има различни конструктори.

Преди да поговорим подробно, нека разгледаме няколко концепции по-долу:

ConcurrentHashMap: Тази карта позволява едновременен достъп до нишка. Само част от картата, наречена сегмент, т.е. основната структура на данните, се заключва при добавяне или актуализиране на картата. Той позволява едновременен достъп до нишка за четене на данните без заключване. Въведена е за подобряване на производителността.

  • Ниво на паралелност: Това е число, което е очакван брой едновременно актуализиращи нишки.
  • Коефициент на натоварване: Това е стойност, която се използва за контрол на фактора за преоразмеряване.
  • Първоначален капацитет: Това е свойство, което създава Карта с предоставения размер.

Нека да видим диаграмата по-долу и да се опитаме да разберем как работи ConcurrentHashMap.

Изображение - едновременно Hashmap - Edureka

Така че в горната диаграма имаме 16 ключалки, които заключват само част от картата, която е необходима, за да могат другите методи да бъдат достъпни от различни нишки, като по този начин се подобрява производителността.

Подобно на HashMap, ConcurrentHashMap работи по подобен начин, съдържа по подразбиране 16 сегмента и съхранява елемент чрез хеширане, така че ако елементите имат същия хеш, те се съхраняват в същия сегмент, както е показано на диаграмата по-горе с помощта на свързания списък.

Продължавайки с тази статия за Concurrent Hash Map в Java

Разлика между ConcurrentHashMap и HashMap

HashMap принадлежи към колекции, докато ConcurrentHashMap принадлежи към едновременни колекции, но има много други разлики между тях.

  • ConcurrentHashMap еБезопасно за резба, т.е.синхронизиран, но HashMap не е синхронизиран.
  • ConcurrentHashMap има ниска производителност, тъй като е синхронизирана, тъй като понякога нишките трябва да изчакат, но HashMap има висока производителност, тъй като не е синхронизирана и всички нишки могат да имат достъп до нея едновременно.
  • Ще получим ConcurrentModificationException, ако две нишки се опитват едновременно да модифицират или добавят съдържание на Object. В случая с ConcurrentHashMap обаче няма да получим изключение, докато изпълняваме същата операция.

  • Нулевите стойности са разрешени за ключ и стойности в HashMap, но ConcurrentHashMap не позволява нулеви стойности за ключ и стойност, която се опита да добави нулева стойност, ще получим изключение, т.е. NullPointerException.

  • HashMap е въведен в JDK 1.2, докато ConcurrentHashMap е въведен в JDK 1.5.

Както видяхме по-рано за по-добра производителност, той се състои от масив от възли като сегменти на таблици, които бяха сегменти на таблици преди Java 8 .

как да използвам софтуера sas -

Кофите са лениво инициализирани, когато се извърши първото вмъкване. Всяка кофа може да се заключи независимо чрез заключване на първия възел на кофата, а операциите за четене не се блокират.

В сравнение с HashMap, ConcurrentHashMap осигурява екстра concurrencyLevel аргумент за контрол на броя на прогнозните нишки, които да се използват.

Конструктори:

  1. ConcurrentHashMap m = нов ConcurrentHashMap ()

    Създава се нова празна карта с първоначален капацитет по подразбиране 16, коефициент на натоварване 0,75 и ниво на съвпадение 16.

  2. ConcurrentHashMap m = нов ConcurrentHashMap (int InitialCapacity)
    Създава се нова празна карта с определен начален капацитет, коефициент на натоварване 0,75 и ниво на паралелност 16.

  3. ConcurrentHashMap m = нов ConcurrentHashMap (int initialCapacity, float loadFactor)

    Създава се нова празна карта с определен начален капацитет и коефициент на натоварване с ниво на паралелност 16.

  4. ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel)
    Създава се нова празна карта с определен начален капацитет, коефициент на натоварване и ниво на паралелност.

  5. ConcurrentHashMap m = нов ConcurrentHashMap (карта m)
    Създава нов ConcurrentHashMap от предоставената карта.

Другите два аргумента: InitiCapacity и loadFactor са работили по същия начин като HashMap.
ConcurrentMap е памет, съгласувана при операции ключ / стойност в среда с много нишки.

Продължавайки с тази статия за Concurrent Hash Map в Java

разлика между куклен и готвач

Капани

Докато извлича обекти, ConcurrentHashMap не е блокиран и може да се припокрива с операции за актуализация, като по този начин за по-добра производителност те извличат само най-скоро завършените операции за актуализация.

Резултатите от обобщените методи за състояние, включително size, isEmpty и containsValue, обикновено са полезни само когато карта не се подлага на едновременни актуализации в други нишки.

Ако едновременните актуализации се контролират правилно, тези методи за състояние могат да бъдат надеждни.

Въпреки че тези методи не гарантират в реално време.

Капацитетът на таблицата по подразбиране е 16, но можем да го променим, като използваме ниво на паралелност.

публичен ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel) {// ... if (InitialCapacity

Ако ключовете ключове трябва да бъдат в сортиран ред, можем да използваме ConcurrentSkipListMap.

След изпълнението на горната програма бихте разбрали Concurrent Hash Map в Java. По този начин стигнахме до края на тази статия за Ако искате да научите повече, разгледайте , доверена компания за онлайн обучение. Курсът за обучение и сертифициране на Java J2EE и SOA на Edureka е предназначен да ви обучи както за основните, така и за разширените Java концепции, заедно с различни Java рамки като Hibernate & Spring.

Имате въпрос към нас? Моля, споменете го в раздела за коментари на тази статия и ние ще се свържем с вас възможно най-скоро.