java - TreeMap - 同步文档说明

标签 java javadoc

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

请注意,此实现并未同步。

如果多个线程同时访问一个map,并且至少有一个线程在结构上修改了map,则必须进行外部同步。 (结构修改是添加或删除一个或多个映射的任何操作;仅更改与现有键关联的值不是结构修改。) This is typically accomplished by synchronizing on some object that naturally encapsulates the map. If no such object exists, the map should be "wrapped" using the Collections.synchronizedSortedMap method.

最佳答案

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

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

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

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

相关文章:

java - 如何向字符串数组添加替代元素

java - Hazelcast::仅使用 Spring 配置一台主机

java - 如何将多维整数数组复制到另一个多维整数数组

java - 由于 StringIndexOutOfBoundsException,maven-javadoc-plugin 失败

java - 描述 API 用途

java - 将 Mono 的列表转换为 Flux

java - 如何使用枚举值获取枚举

java - @linkplain 标签的用途是什么,它与@link 有何不同

java - 无法创建 javaDoc

java - 如何搜索javadoc生成的HTML文档?