【发布时间】:2013-05-30 21:57:12
【问题描述】:
我有一个场景,我想在方法中使用StringBuilder 作为局部变量。我知道如果StringBuilder 是一个局部方法变量,它不应该有任何线程安全问题。
但是,如果我在 StringBuilder 上附加一个实例变量,例如:
class MyClass {
private List<String> property;
public void myMethod() {
StringBuilder sb = new StringBuilder();
for(String s : property) {
sb.append(s);
}
}
// some other methods that mutate property
}
我认为要使这个线程安全,只需将StringBuilder 更改为StringBuffer 是不够的。我应该在属性本身上进行同步吗?
【问题讨论】:
-
我的方法在做什么?似乎它正在创建一个 StringBuilder 对象并将其丢弃......
-
你需要同步访问
List,而不是StringBuilder -
您可能希望在属性之间进行分隔。
标签: java multithreading thread-safety stringbuilder