问题描述
HashMap在多线程环境下会有数据丢失的问题
例如:两个线程添分别添加不同的数据,通过debgger断点演示
import java.util.*;
public class ContainerNotSafe {
public static void main(String[] args) throws InterruptedException {
Map map = new HashMap<>();
Thread t1 = new Thread(() -> {
map.put("重地", new Object());
map.put("通话", new Object());
}, "t1");
Thread t2 = new Thread(() -> {
map.put("通话", new Object());
}, "t2");
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("map = " + map);
}
}
不打断点正常执行结果:
打断点执行结果:
原因分析:
Hash值相同,进行了value覆盖
- 线程筛选
- 查看线程1hash值
- 查看线程2hash值
解决方案:
目前位置无解决方案