2013-03-11 3 views
1

В качестве увеличения записей в ConcurrentHashMap будет выполнено переименование и будут созданы новые хэш-ковши (от 16 до 32). Q: Будут ли увеличиваться блокировки (первоначально 16) (до 32) или 16 блокировок на 32 хэш-кнопках (1 блокировка на 2 хэш-ковши) и т. Д., Поскольку записи продолжают увеличиваться (только для справки мы можем взять loadfactor как 1)ConcurrentHashMap Locks увеличивается

Onre дополнительного вопроса: Я хочу, чтобы прочитать implementaion из ConcurretnHashMap, пожалуйста, поделитесь ссылкой (кроме Java Docs/кода)

+0

http://www.docjar.com/html/api/java/util/concurrent/ConcurrentHashMap.java.html – James

ответ

1

параллелизма в ConcurrentHashMap устанавливаются при инициализации и не меняется. Если вы используете значение по умолчанию 16, это всегда будет 16, независимо от того, насколько хэш будет изменен.

Пару вещей, чтобы иметь в виду:

  • ConcurrentHashMap является более дорогим, чтобы изменить размер, чем обычный HashMap. Вы действительно должны попытаться предоставить ему предположение о количестве записей, чтобы оно не изменялось.

  • Параллельность - это количество потоков, которые могут записываться на карту одновременно в идеальном случае. Читатели не блокируют хэш, поэтому вам не нужно учитывать их, когда вы беспокоитесь о параллелизме.