我正在Spring Controller中编写一个私有实用程序方法。
我需要使用StringBuffer
或StringBuilder
。前者是线程安全的,后者不是,但后者要快得多。
基本上,它看起来像这样:
private String buildTextToDisplay() {
StringBuffer sb = new StringBuffer();
sb.append( ... );
return sb.toString();
}
显然,我不希望两个会话同时调用它并返回垃圾。
答案 0 :(得分:12)
由于sb
是局部变量,因此它不需要是线程安全的。 (每个线程都有自己对唯一StringBuilder
的引用,对吗?)
答案 1 :(得分:5)
StringBuffer
的线程安全性在用作类的成员变量时非常有用。但如果它是局部变量,则StringBuilder
更好,因为局部变量没有线程安全的概念。
答案 2 :(得分:2)
您必须以非常具体的方式使用构建器来注意StringBuilder
和StringBuffer
之间的速度差异。在99%的使用案例中没有可观察到的差异,而现代JIT则是100%由于锁定省略。
但是,正如其他人注意到的那样,您可以自由使用StringBuilder
。