发布于 2020-05-06 06:29:50
因为String对象是不可变的,所以只有引用被=和+=这样的操作符修改。因此,易失性对于String是安全的,因为它适用于引用本身。这也适用于其他不可变对象,就像它适用于原语一样。
澄清:
+=本身并不是线程安全的,即使在易失性的String上也是如此,因为它不是原子的,由读和写组成。如果有什么东西影响到读写之间的String对象,它可能会导致意外的结果。虽然得到的String仍然有效,但它可能有一个意外的值。特别是,一些更改可能会“覆盖”其他更改。例如,如果您有一个值为String的"Stack ",而一个线程试图添加"Overflow",而另一个线程试图添加"Exchange",则可能只应用一个更改。这也适用于原语。如果您感兴趣,可以在这里中找到有关这个特定问题的更多细节(主要是原语的上下文)。
发布于 2020-05-06 06:23:38
Java字符串是最终类,是不可变的和线程安全的.
字符串没有中间状态,在多线程情况下不会与lock或synchronize混淆。没有必要这样做。
https://stackoverflow.com/questions/61628641
复制相似问题