代码之家  ›  专栏  ›  技术社区  ›  Suganthan Madhavan Pillai

从多个线程添加要设置的元素

  •  1
  • Suganthan Madhavan Pillai  · 技术社区  · 2 年前

    我有一个 Set 我用多种方法给它添加了独特的元素 Threads .在每次跑步中 设置 从295到299不等。

            Set<String> ids = new HashSet<>();
            Thread t1 = new Thread(() -> {
                for (int i = 0; i < 100; i++) {
                    ids.add("Id" + i);
                }
            });
    
            Thread t2 = new Thread(() -> {
                for (int i = 100; i < 200; i++) {
                    ids.add("Id" + i);
                }
            });
    
            Thread t3 = new Thread(() -> {
                for (int i = 200; i < 300; i++) {
                    ids.add("Id" + i);
                }
            });
    
            t1.start();
            t2.start();
            t3.start();
            t1.join();
            t2.join();
            t3.join();
            System.out.println(ids.size());
    

    虽然我没有使用 thread-safe 集合我添加独特元素时,我希望大小应该始终保持一致。

    我知道如何解决这个问题(使用 Set<String> ids = ConcurrentHashMap.newKeySet(); ),但我试图理解为什么我的尺码不一致?

    0 回复  |  直到 2 年前