gpt4 book ai didi

java - TreeMap - 同步文档说明

转载 作者:行者123 更新时间:2023-11-29 04:31:13 25 4
gpt4 key购买 nike

TreeMap javadoc 有以下部分,我无法理解以下部分的最后一行。这是否意味着创建一个锁并将 map 修改逻辑移动到一个同步块(synchronized block)或其他东西中。只有结构修改需要同步,访问是线程安全的。

请注意,此实现不是同步的。

如果多个线程并发访问一个映射,并且至少有一个线程在结构上修改了映射,则必须进行外部同步。 (结构修改是添加或删除一个或多个映射的任何操作;仅更改与现有键相关联的值不是结构修改。)这通常是通过同步某些自然封装映射的对象来实现的。如果不存在这样的对象,则应使用 Collections.synchronizedSortedMap 方法“包装” map 。

最佳答案

基本上,Javadoc 相当困惑,因为如果您完全修改映射(包括当您只是更改与现有键关联的值时),几乎在所有情况下您都希望同步所有操作。 (几乎)唯一不需要同步的情况是 map 在发布后完全只读。

现在,为什么 Javadoc 会说 如果 ... 至少有一个线程在结构上修改映射 - 这是因为如果您只是更改与现有键关联的值,那么最糟糕的情况可能发生的事情是您在某个未指定的时间内读取过时值。相反,如果在没有同步的情况下进行结构更改,则可能会发生更糟糕的事情(如 NullPointerException,无限循环)。

然而,同步或使用并发集合几乎总是比允许陈旧值更好。

关于java - TreeMap - 同步文档说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43741682/

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