Я пытался понять, как работает уровень параллелизма ConcurrentHashMap (третий аргумент его конструктора), и читал эту статью - https://dzone.com/articles/how-concurrenthashmap-works-internally-in-java.В частности, он определяет уровень параллелизма как
. Определяет число, являющееся оценочным числом одновременно обновляемых потоков.Реализация выполняет внутреннее определение размера, чтобы попытаться вместить столько потоков.
Затем она определяет способ выбора сегмента, используя
Segment seg = segments[(hash & 0x1F)];
, где "хэш" - это хэш-кодвставляемый объектМой вопрос заключается в том, что, поскольку вы не всегда можете предсказать значение хэша вставленных объектов, возможно ли, что если у вас уровень параллелизма 16, теоретически вы можете попасть в ситуацию, когда все объекты вставляются в один и тот же сегмент?Если да, имеет ли смысл всегда выбирать количество сегментов в зависимости от того, сколько потоков может получить доступ к структуре данных, или есть лучший способ выбрать уровень параллелизма?