Как ConcurrentHashMap сможет помещать, удалять и получать запись карты (ключ, значение) для одного и того же сегмента в одно и то же время для нескольких потоков в Java?

Предположим, есть три потока, которые хотят получить доступ к одному и тому же объекту ConcurrentHashMap Java (Java 7). Эти три потока работают как put, remove и get соответственно. Не могли бы вы помочь мне понять, как ConcurrentHashMap сможет помещать, удалять и получать запись карты (ключ, значение) для одного и того же сегмента в одно и то же время для нескольких потоков в Java (Java 7)? Пожалуйста, укажите, есть ли какие-либо обновления в Java 8 для того же.

Изменить:

Что означает сегмент в ConcurrentHashMap согласно Java 7?

Уровень параллелизма, разрешенный во время операций обновления, может быть установлен необязательным аргументом конструктора concurrencyLevel (по умолчанию 16) [ ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel) ] , который используется в качестве подсказки для внутреннего размера, для внутреннего разделения ConcrrentHashMap, такой раздел обычно известен как Segment. Каждый сегмент управляет своей собственной HashTable. ConcurrentHashMap по умолчанию поддерживает список из 16 сегментов.

Спасибо и С уважением.


person Manjur    schedule 09.02.2020    source источник
comment
Если вы действительно хотите узнать, как работают эти методы, посмотрите исходный код. Где я могу найти и просмотреть исходные файлы JDK 7? Или посмотрите на source.zip в папке JDK. --- На абстрактном уровне эффект будет таким, как если бы 3 потока выполняли свои операции в разное время, в произвольном порядке, а не все 3 в одно и то же время, подобно изоляции SQL Serializable уровень.   -  person Andreas    schedule 09.02.2020
comment
Пожалуйста, отредактируйте свой вопрос, включив в него описание того, что вы подразумеваете под сегментом.   -  person Progman    schedule 09.02.2020
comment
Если вы имеете в виду один и тот же ключ, ответ - нет; ConcurrentHashMap получит блокировку для отдельного ключа при выполнении любой операции с этим ключом. (Блокировка является внутренней; она не синхронизируется с самим фактическим ключевым объектом.)   -  person kaya3    schedule 09.02.2020
comment
Я предлагаю сравнить исходные файлы java 7 и java 8 с разницей, чтобы увидеть, были ли какие-либо изменения.   -  person Scratte    schedule 09.02.2020