gpt4 book ai didi

java - 修改 ConcurrentHashMap 中的值

转载 作者:行者123 更新时间:2023-12-04 20:51:20 27 4
gpt4 key购买 nike

ConcurrentHashMap 中有分段的概念。如果两个线程试图访问 ConcurrentHashMap,这意味着什么,它们被分成两个 block , block 的默认大小为 16。

现在假设在一个场景中,ConcurrentHashMap 只有两个元素,并且有两个不同的线程来了,线程 1 尝试修改第一个值,线程 2 尝试修改第二个值。这种情况下ConcurrentHashMap会不会去切分?

现在在不同的场景中,两个线程都试图修改相同的值,ConcurrentHashMap 将如何处理这种情况?通过使用锁定机制还是有其他东西?

最佳答案

ConcurrentHashMap 有几个桶。键根据它们的散列值映射到其中一个桶中。当您添加或检索值时,与该键关联的存储桶将被锁定。

对于您的第一个问题,有两种可能性:两个键位于同一个存储桶中,或者它们位于不同的存储桶中。在第一种情况下,一次只能有一个线程工作——第一个获得锁的线程将获取它并工作,第二个线程将等待轮到它。在第二种情况下, key 位于不同的存储桶中,它们将各自获得独立的锁并同时执行它们的工作。

对于你的第二个问题,被锁定的是bucket,没有别的。如果两个线程尝试为同一个键存储两个值,则 ConcurrentHashMap promise 这两个值之一将与该键相关联。 如果线程 A 运行 map.put("Answers",2); 并且线程 B 运行 map.put("Answers",10);,然后 ConcurrentHashMap 将确保映射有效并且包含 210 用于 “Answers”,但它不会关于这两者中哪一个的任何 promise 。

关于java - 修改 ConcurrentHashMap 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15909425/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com