小智 10
不可变对象String是线程安全的,因为它们的内部状态永远不会改变,final对这些String对象的引用是线程安全的.
但是,如果您对不可变对象有非最终引用,则它不是完全线程安全的.
鉴于:
public final String x = "This reference is thread safe, it can never change";
任何引用x都是线程安全的,因为x引用的内容永远不会改变且String对象是不可变的.
并给出:
public String s = "This reference is not thread safe, it can change";
任何引用s是不是线程安全的,因为s都不可能改变到别的东西.那是 :
s = "this is another different immutable String";
可以改变所指的东西s.如果您的引用永远不会更改,final如果需要更改它们volatile,则应声明它们,以便JVM知道重新读取引用的内容,而不执行任何可能错过更改的缓存验证s.
public volatile String s = "This reference is expected to change, so tell the JVM";
有关线程安全性和关键字的更多信息,请参阅最后的最后一个单词final.
不,字符串是不可变的.如果您所做的只是读取字符串,那么您绝对没问题.
编辑添加:是,如果您有可变属性,则需要同步更改属性的值.
| 归档时间: | 
 | 
| 查看次数: | 2665 次 | 
| 最近记录: |