в ConcurrentHashMAP, почему HashEntry был впервые представлен в Java 7 и почему он был удален в JDK8? - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь понять реализацию ConcurrentHashMAP (CHM), НО это выглядит как огромная разница в реализации Java 7 и Jav8 в CHM,

1) Я пытаюсь начать понимать с самого первого вопроса, почему HashEntry впервые появился в Java 7 и почему он был удален в JDK8?

2) Какой фактор определяет размер таблицы в CHM, это уровень параллелизма или емкость?

/**
 * Stripped-down version of helper class used in previous version,
 * declared for the sake of serialization compatibility
 */
static class Segment<K,V> extends ReentrantLock implements Serializable {
    private static final long serialVersionUID = 2249069246763182397L;
    final float loadFactor;
    Segment(float lf) { this.loadFactor = lf; }
}

3) играет ли уровень параллелизма две роли?

Один из них - определить размер таблицы, а затем определить количество одновременных потоков, кто может обновить карту? Какова роль уровня параллелизма во внутренней реализации CHM, т. е. как количество потоков ограничено с помощью этого значения переменной, какая часть реализации диктует это?

1 Ответ

0 голосов
/ 26 июня 2018

Похоже, у вас нет полного понимания ConcurrentHashMap и цели его внедрения. Он был введен для выполнения одновременных операций чтения и записи с минимальной блокировкой. Используя ConcurrentHashMap, можно одновременно блокировать разные части карты. В Java 8 они сделали ConcurrentHashMap более свободным от блокировок.

Concurrencylevel играет важную роль в определении различных значений атрибутов для ConcurrentHashMap.

1) Я пытаюсь начать понимать с самого первого вопроса, почему HashEntry впервые появился в Java 7 и почему он был удален в JDK8?

Ответ - Вы уверены, что он удален? Это вероятно все еще там под сегментами. Пожалуйста, смотрите ниже -

ConcurrentHashMap

2) Какой фактор определяет размер таблицы в CHM, это уровень параллелизма или емкость?

Ответ - Concurrencylevel решает все. Уровень параллелизма по умолчанию - 16 или 32. Вы также можете установить его программно.

3) уровень параллелизма играет две роли? Один из них заключается в определении размера таблицы, а затем в определении количества одновременных потоков, кто может обновить карту?

Ответ - ДА. Это дает подсказку для определения размеров. Обычно количество сегментов и параллельных потоков ограничено этим числом.

Какова роль уровня параллелизма во внутренней реализации CHM, т. Е. Как количество потоков ограничено с помощью этого значения переменной, какая часть реализации диктует это?

Вы можете проверить документацию оракула. ​​

CocurrentHashMap

Для дальнейшего использования -

Java 8 ConcurrentHashMap

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...