首页 > Java中关于HashMap的疑问
头像
起一个响亮的名字吧...
编辑于 2020-09-04 14:55
+ 关注

Java中关于HashMap的疑问

最近在学Hash Map的底层,但出现了一些盲点。就是在jdk1.7中,当需要扩容时,源码是这样写的
void resize(int newCapacity) {
        Entry[] oldTable = table;
        int oldCapacity = oldTable.length;
        if (oldCapacity == MAXIMUM_CAPACITY) {
            threshold = Integer.MAX_VALUE;
            return;
        }

        Entry[] newTable = new Entry[newCapacity];
        transfer(newTable, initHashSeedAsNeeded(newCapacity));
        table = newTable;
        threshold = (int)Math.min(newCapacity * loadFactor, MAXIMUM_CAPACITY + 1);
    }
关于这里的
Entry[] newTable = new Entry[newCapacity];
我想知道,在jdk1.7构成循环链表的那种情况下,是每一个线程都会new一块新的Entry数组,还是说所有的线程共享一块Entry数组?

除此之外,有没有情况说是,不同的线程都开辟了一块新的Entry数组,最后写回给table的是最后执行完的哪个线程呢?

还请大佬们帮我解决一下疑惑

全部评论

(5) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期精华帖

热门推荐