首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否将字符串类型引用标记为易失性安全?

是否将字符串类型引用标记为易失性安全?
EN

Stack Overflow用户
提问于 2020-05-06 06:21:01
回答 2查看 1.1K关注 0票数 7

我读过一些帖子和文章,说我们不应该将java对象声明为易失性的,因为结果,只有引用才会变得易失性。下面是一些示例:

链接-1 链接-2 链接-3

Sonar建议的‘非原始字段不应该是“易失性的’,然而,它也表明,所描述的问题是指可变对象‘类似地,标记可变对象字段易失性意味着对象引用是易失性的,但对象本身不是’。

我的问题是:声明java字符串为易失性安全吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-06 06:29:50

因为String对象是不可变的,所以只有引用被=+=这样的操作符修改。因此,易失性对于String是安全的,因为它适用于引用本身。这也适用于其他不可变对象,就像它适用于原语一样。

澄清:

+=本身并不是线程安全的,即使在易失性的String上也是如此,因为它不是原子的,由读和写组成。如果有什么东西影响到读写之间的String对象,它可能会导致意外的结果。虽然得到的String仍然有效,但它可能有一个意外的值。特别是,一些更改可能会“覆盖”其他更改。例如,如果您有一个值为String"Stack ",而一个线程试图添加"Overflow",而另一个线程试图添加"Exchange",则可能只应用一个更改。这也适用于原语。如果您感兴趣,可以在这里中找到有关这个特定问题的更多细节(主要是原语的上下文)。

票数 5
EN

Stack Overflow用户

发布于 2020-05-06 06:23:38

Java字符串是最终类,是不可变的和线程安全的.

字符串没有中间状态,在多线程情况下不会与locksynchronize混淆。没有必要这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61628641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档