我从多个运行嵌套类的线程访问私有String字段。
我知道String对象是不可变的,因此传递String作为参数应始终是安全的。但是如何访问完全相同的字段?我认为它不是线程安全的吗?
答案 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
)作为线程的数据发送。