Spring控制器是否是线程安全的?

时间:2012-08-26 13:10:11

标签: java multithreading thread-safety stringbuilder stringbuffer

我正在Spring Controller中编写一个私有实用程序方法。

我需要使用StringBufferStringBuilder。前者是线程安全的,后者不是,但后者要快得多。

基本上,它看起来像这样:

private String buildTextToDisplay() {
    StringBuffer sb = new StringBuffer();
    sb.append( ... );
    return sb.toString();
}

显然,我不希望两个会话同时调用它并返回垃圾。

3 个答案:

答案 0 :(得分:12)

由于sb是局部变量,因此它不需要是线程安全的。 (每个线程都有自己对唯一StringBuilder的引用,对吗?)

答案 1 :(得分:5)

StringBuffer的线程安全性在用作类的成员变量时非常有用。但如果它是局部变量,则StringBuilder更好,因为局部变量没有线程安全的概念。

答案 2 :(得分:2)

您必须以非常具体的方式使用构建器来注意StringBuilderStringBuffer之间的速度差异。在99%的使用案例中没有可观察到的差异,而现代JIT则是100%由于锁定省略

但是,正如其他人注意到的那样,您可以自由使用StringBuilder