Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串类在java中如何是线程安全的?_Java_String_Multithreading - Fatal编程技术网

字符串类在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";
    }
}