如何同步哈希图?[已结束]

How to synchronize an hashmap? [closed]

提问人:dhakshna 提问时间:11/17/2023 更新时间:11/17/2023 访问量:50

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

7天前关闭。

我想同时运行我的两个线程,但预期的输出必须是这样的: 0=0 , 1001=1001 , 1002=1002 , 1003=1003 , 1=1 ...(顺序不相同)。

我知道可以使用 ConcurrentHashMap 或 HashTable 实现它,但我希望它在普通的 HashMap 中实现。我使用“锁定”概念实现了它,但我只想尝试使用“同步”块。

但是当我运行下面的代码时,我收到的是 0=0,1=1,2=2...1000=1000,1001=1001,1002=1002...2000=2000

也欢迎线程的任何更改......

提前致谢。

public static void main(String[] args) {

        HashMap<Integer,Integer> map = new HashMap<>();
        Thread t1 = new Thread(()->
        {
            for (int i = 0; i <= 1000; i++) {
                synchronized (map)
                {
                    map.put(i,i);
                }
            }
        });

        Thread t2 = new Thread(()->
        {
            for (int i = 1001; i <= 2000; i++) {
                synchronized (map)
                {
                    map.put(i,i);
                }
            }
        });

        t1.start();
        t2.start();

        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }


        System.out.println(map);
        System.out.println(map.size());
    }
java hashmap synchronized thread-synchronization-block

评论

5赞 user207421 11/17/2023
您的预期产出和实际产出之间有什么区别?它们对我来说看起来是一样的,除了顺序,它没有指定。你的问题是什么?HashMap
3赞 Rifat Rubayatul Islam 11/17/2023
如果您想保持广告订单,请查看 LinkedHashMap
2赞 Thomas Kläger 11/17/2023
输出似乎是排序的,这与实现方式以及计算其哈希值的方式有关 - 即使您以完全随机的顺序插入数字 0 到 1999,输出看起来也是排序的。HashMapInteger

答: 暂无答案