English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Разница между параллельными хэш-картами и синхронизированными хэш-картами в Java

Конкурентоспособный hashmap был введен в JDK 1.5. Конкурентоспособный хэш-маппинг применяет lock только на уровне хранилища, называемого фрагментом, при добавлении или обновлении карты. Таким образом, конкурентоспособный хэш-маппинг позволяет выполнять конкурентные чтение и запись в карту. 

Синхронизированный hashmap (Collection.syncronizedHashMap()) - это метод в фреймворке Collection. Этот метод applies lock to the entire collection. Таким образом, если один поток доступ к этой карте, то другой поток не может получить доступ к этой карте. 

НомерКлючПараллельный хэш-маппингСинхронизированный хэш-маппинг
1
Реализация
Это класс, реализующий интерфейсы параллельного хэш-маппинга и сериализации. 
Это метод класса Collection.  
2
Механизм блокировки
Заключение части
Заключение всего маппинга. 
3
Производительность
КонCURRENT.HashMap позволяет параллельное чтение и запись. Таким образом, производительность выше, чем у синхронизированного маппинга. 
Множественные потоки не могут одновременно обращаться к маппингу. Таким образом, производительность относительно ниже, чем у конCURRENT.HashMap.
4
Пустой ключ
Запрещается использовать null в качестве ключа или значения. 
Он позволяет null в качестве ключа.
5 
Исключение изменения во время выполнения
Он не вызывает исключение изменения во время выполнения. 
Итератор синхронизированного маппинга вызывает исключение изменения во время выполнения

Пример SynchronizedMap

public class SynchronizedMapExample {
   public static void main(String[] args) {
      Map<Integer, String> laptopmap = new HashMap<Integer, String>();
      laptopmap.put(1, "IBM");
      laptopmap.put(2, "Dell");
      laptopmap.put(3, "HCL");
      //Создание синхронизированного маппинга
      Map<Integer, String> syncmap = Collections.synchronizedMap(laptopmap);
      System.out.println("Синхронизированная карта: " + syncmap);
   }
}

Пример ConcurrentHashMap---

public class ConcurrentHashMap---Example {
   public static void main(String[] args) {
      //ConcurrentHashMap---
      Map<Integer, String> laptopmap = new ConcurrentHashMap<Integer, String>();
      laptopmap.put(1, "IBM");
      laptopmap.put(2, "Dell");
      laptopmap.put(3, "HCL");
      System.out.println("ConcurrentHashMap--- is: " + laptopmap);
   }
}