gpt4 book ai didi

java - 为什么两个 AtomicInteger 永远不相等?

转载 作者:IT老高 更新时间:2023-10-28 21:05:54 25 4
gpt4 key购买 nike

我偶然发现了 AtomicInteger 的来源并意识到

new AtomicInteger(0).equals(new AtomicInteger(0))

评估为 false

这是为什么?它是与并发问题相关的一些“防御性”设计选择吗?如果是这样,如果采用不同的实现方式会出现什么问题?

(我确实意识到我可以使用 get== 代替。)

最佳答案

这部分是因为 AtomicInteger 不是 Integer 的通用替代品。

java.util.concurrent.atomic package summary状态:

Atomic classes are not general purpose replacements for java.lang.Integer and related classes. They do not define methods such as hashCode and compareTo. (Because atomic variables are expected to be mutated, they are poor choices for hash table keys.)

hashCode 未实现,equals 也是如此。这部分是由于discussed in the mailing list archives这个更大的理由。 ,关于 AtomicInteger 是否应该扩展 Number

AtomicXXX 类不是原语的直接替代品,并且它没有实现 Comparable 接口(interface)的原因之一是,比较一个 AtomicXXX 类的两个实例是没有意义的大多数情况下的 AtomicXXX 类。如果两个线程可以访问和改变 AtomicInteger 的值,那么 the comparison result is invalid before you use the result, if a thread mutates the value of an AtomicInteger . equals 方法的基本原理相同——相等测试的结果(取决于 AtomicInteger 的值)仅在线程改变其中一个之前有效AtomicInteger有问题。

关于java - 为什么两个 AtomicInteger 永远不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7567502/

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