【发布时间】:2010-10-12 12:16:37
【问题描述】:
我正在构建一个由多个部分组成的字符串,并希望使用StringBuffer 或StringBuilder 来执行此操作。从 Java 5 文档中,我看到 StringBuilder 在可能的情况下是首选,但需要注意的是
StringBuilder的实例对于多线程使用是不安全的。
从这个声明中,我了解到我不应该有一个由多个线程共享的 StringBuilder 实例。但是这个案例呢:
//Is this safe?
//foo() is called simultaneously by multiple threads
String foo(String a, String b) {
return new StringBuilder(a).append(b).toString();
}
这里可能有多个线程同时在函数中,同时使用StringBuilder类(例如,静态变量的并发访问,如果有的话),但每个线程都有自己独立的StringBuilder 的实例。从文档中,我不能完全确定这是否算作多线程使用。
【问题讨论】:
-
将 foo() 设为静态方法也可能有一些好处,因为它不涉及任何实例变量。
-
@Kip:取决于班级。但有时您可能想要执行多态操作,而将方法设为静态会阻碍这一点。
-
使用 String.concat 会更快,但我认为这只是一个例子。
标签: java multithreading thread-safety stringbuilder