Почему младшие 16 бит sizeCtl вычисляют количество потоков от 1, а не от 0 в ConcurrentHashMap?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему младшие 16 бит sizeCtl вычисляют количество потоков от 1, а не от 0 в ConcurrentHashMap?

Сообщение Anonymous »

Когда я прочитал исходный код ConcurrentHashMap в Java 8, я узнал, что он использует поле sizeCtl для управления инициализацией и изменением размера: -1 — для инициализации, а остальные отрицательные значения — для изменения размера. Он будет использовать U.compareAndSwapInt(this, SIZECTL, sc, (rs = 0) {
Node[] tab, nt; int n, sc;
while (s >= (long)(sc = sizeCtl) && (tab = table) != null &&
(n = tab.length) < MAXIMUM_CAPACITY) {
int rs = resizeStamp(n);
if (sc < 0) {
if ((sc >>> RESIZE_STAMP_SHIFT) != rs || sc == rs + 1 ||
sc == rs + MAX_RESIZERS || (nt = nextTable) == null ||
transferIndex

Подробнее здесь: https://stackoverflow.com/questions/788 ... -rather-th
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»