gpt4 book ai didi

java - 正确的方法来对AtomicReference持有的对象进行相等和哈希码处理

转载 作者:行者123 更新时间:2023-12-03 12:59:01 24 4
gpt4 key购买 nike

AtomicReference不适用于Objects.equals()Objects.hash()

    AtomicReference<String> ref1 = new AtomicReference<>("hi");
AtomicReference<String> ref2 = new AtomicReference<>("hi");
System.out.println(Objects.equals(ref1, ref2)); //false
System.out.println(Objects.equals(ref1.get(), ref2.get())); //true but potentially not thread safe
System.out.println(Objects.hash(ref1) == Objects.hash(ref2)); //false
System.out.println(Objects.hash(ref1.get()) == Objects.hash(ref2.get())); //true but potentially not thread safe

检查 AtomicReference持有的两个对象是否相等并以可行且线程安全的方式计算相同哈希的最佳方法是什么?

最佳答案

What's the best way to check if two [variables]...are equal...in a way that both works and is thread safe?



这个问题没有任何意义。假设您有一个线程A要测试变量,而线程B可以随时更改其中一个变量而不会发出警告。

您想找出变量是否相等?好那怎么了如果您的“线程安全”相等性测试说它们相等,那么在执行相等性测试的时间与使用信息进行操作之间的时间里,阻止线程B更改它们之一的原因是什么。

在某个时刻知道两个变量是否相等没有任何值(value):您想知道在程序处于某种特定状态时变量是否相等,然后想要在状态改变之前对其进行一些操作。

因此,是的,您需要在锁定对象上使用 synchronized,但这不仅是为了保护相等性测试。它必须防止程序在测试变量的整个过程中更改您关心的状态,然后根据测试结果执行某些操作。

关于java - 正确的方法来对AtomicReference持有的对象进行相等和哈希码处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53884445/

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