小编tl2*_*221的帖子

为什么并发放入 ConcurrentHashMap 不会产生预期结果?

我正在尝试使用多个线程测试并发放入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个项目吗?

java concurrency multithreading hashmap concurrenthashmap

0
推荐指数
1
解决办法
65
查看次数