Java:String对象的线程安全性

时间:2014-05-21 07:03:35

标签: java string thread-safety immutability

我从多个运行嵌套类的线程访问私有String字段。

我知道String对象是不可变的,因此传递String作为参数应始终是安全的。但是如何访问完全相同的字段?我认为它不是线程安全的吗?

2 个答案:

答案 0 :(得分:2)

如果您只是阅读该字段,它始终是线程安全的。 make field final,以便编译器检查你是否正在改变值?

private final String theField = "TheValue"

答案 1 :(得分:1)

它仍然是线程安全的,因为您只能访问该字段。问题是如果某个线程会尝试修改字段(其状态或更改整个对象引用),而其他线程同时获取此变量的值。

通常,您创建一个实现Runnable的类并传递必要的参数:

class MyTask implements Runnable {
    private final String needThis;
    public MyTask(String needThis) {
        this.needThis = needThis;
    }
    @Override
    public void run() {
        //do your task using needThis variable here...
    }
}

这也可以应用于其他类型的参数。另外,最好将不可变类的对象引用(如String)作为线程的数据发送。