本文分析是基于JDK1.7的HashMap
多线程情况下HashMap所带来的问题
- 多线程put操作后,get操作导致死循环。
- 多线程put操作,导致元素丢失。
死循环场景重现
public class HashMapTest extends Thread {
private static HashMap<Integer, Integer> map = new HashMap<>(2);
private static AtomicInteger at = new AtomicInteger();
@Override
public void run() {
while (at.get() < 1000000) {
map.put(at.get(), at.get());
at.incrementAndGet();
}
}