Когда я прочитал исходный код 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
Мобильная версия