gpt4 book ai didi

java - 将字符串类型引用标记为 volatile 安全吗?

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

我读过一些帖子和文章,说我们不应该将 java 对象声明为 volatile,因为结果,只有引用变为 volatile。这里有些例子:

link-1
link-2
link-3

Sonar 的建议是“非原始字段不应该是“易失的””,但是,它也表明所描述的问题是指可变对象“同样,将可变对象字段标记为 volatile 意味着对象引用是易失的,但对象本身是不是'。

我的问题是:将 java String 声明为 volatile 是否安全?

最佳答案

因为String对象是不可变的,只有引用被 = 等运算符修改和 += .因此,volatile 对于 String 是安全的,因为它适用于引用本身。这也适用于其他不可变对象(immutable对象),就像它适用于原语一样。

澄清:
+=即使在 volatile String 上,它本身也不是线程安全的,因为它不是原子的,并且由一个读取和一个写入组成。如果有什么影响 String对象之间的读写,可能会导致意想不到的结果。而结果 String仍然有效,它可能有一个意想不到的值。特别是,某些更改可能会“覆盖”其他更改。例如,如果您有 String值为 "Stack "并且一个线程试图追加 "Overflow"而另一个尝试追加 "Exchange" , 有可能只应用一个更改。这也适用于原语。如果您有兴趣,可以在 here 中找到有关此特定问题的更多详细信息(主要是在原语的上下文中)。 .

关于java - 将字符串类型引用标记为 volatile 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61628641/

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