我正在尝试使用多个线程测试并发放入ConcurrentHashMap,但处理后的地图大小不是我所期望的。
我有以下代码将 1000 个条目插入到 a 中ConcurrentHashMap:
@Test
public void testThreadSafetyConcurrentHashMap() {
Map<Integer, Integer> map = new ConcurrentHashMap<>();
Runnable runnable = () -> {
for (int i = 0; i < 1000; i++) {
map.put(i, i);
}
};
ExecutorService executorService = Executors.newFixedThreadPool(4);
for (int i = 0; i < 4; i++) {
executorService.submit(runnable);
}
System.out.println(map.size());
}
Run Code Online (Sandbox Code Playgroud)
我预计会map.size()收到 1000 件商品,但并不是每次都收到。
有人能告诉我问题是什么吗?我认为4个线程同时放入1000个项目,最终会导致总共1000个项目吗?