字符串类在java中如何是线程安全的?
如果线程正在访问上述运行方法,字符串类在java中如何是线程安全的?,java,string,multithreading,Java,String,Multithreading,如果线程正在访问上述运行方法, 对“ABC”的引用现在指向“ABC”的内部工作方式?Strings在Java中是不可变的。您没有修改字符串,您只是指向另一个值。从这个角度来看,它是线程安全的-str要么是“ABC”要么是“ABC”,它不可能是无效或非法的。String是不可变的。你所做的只是修改一个引用。这个类不是线程安全的。好吧,你的标题要求一些不同于文本的东西。如果您想在标题中找到问题的答案,请阅读或。@AndyTurner,如果这是ThreadString的完整定义,那么有什么不是“线程安
对“ABC”的引用现在指向“ABC”的内部工作方式?
String
s在Java中是不可变的。您没有修改字符串
,您只是指向另一个值。从这个角度来看,它是线程安全的-str
要么是“ABC”
要么是“ABC”
,它不可能是无效或非法的。String
是不可变的。你所做的只是修改一个引用。这个类不是线程安全的。好吧,你的标题要求一些不同于文本的东西。如果您想在标题中找到问题的答案,请阅读或。@AndyTurner,如果这是ThreadString
的完整定义,那么有什么不是“线程安全”的呢?“线程安全”并不意味着没有线程不安全的方法来使用该类。使用任何类都有线程不安全的方法。线程安全只意味着来自多个线程的重叠访问不会使任何方法违反其API约定或使任何类的数据进入坏状态。ThreadString
类的数据没有明显的无效状态,该类的唯一方法只是执行单个原子操作。不可变类本身是线程安全的,但不可变类的引用不是线程安全的。您正在类中使用字符串引用。str
可以设置为任何值:该字段不是私有字段。
public class ThreadString extends Thread {
String str = "ABC";
public void run() {
str = "abc";
}
}