java7的HashMap造成死循环的通俗化讲解
在JDK1.7及以前的版本,如果在并发环境中使用HashMap保存数据,有可能会产生死循环的问题。产生这个问题是因为JDK1.7及以前的版本中,HashMap扩容采用的是头插入,1.8做的改进是采用尾插法,所以不会造成死循环的问题。
首先,来看1.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

Java7的HashMap在并发环境下扩容时,由于头插入策略可能导致死循环。Java8通过改用尾插法避免了这个问题。文章详细解释了死循环产生的过程以及Java8如何解决这个问题。
最低0.47元/天 解锁文章
4066

被折叠的 条评论
为什么被折叠?



