Java Spring控制器是线程安全的吗?

Java Spring控制器是线程安全的吗?,java,multithreading,thread-safety,stringbuilder,stringbuffer,Java,Multithreading,Thread Safety,Stringbuilder,Stringbuffer,我正在Spring控制器中编写一个私有实用程序方法 我需要使用StringBuffer或StringBuilder。前者是线程安全的,后者不是,但后者要快得多 基本上,它看起来是这样的: private String buildTextToDisplay() { StringBuffer sb = new StringBuffer(); sb.append( ... ); return sb.toString(); } 显然,我不希望两个会话同时调用它并返回垃圾。因为s

我正在Spring控制器中编写一个私有实用程序方法

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

基本上,它看起来是这样的:

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

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

因为
sb
是一个局部变量,所以它不需要是线程安全的。(每个线程都有自己对唯一的
StringBuilder
,对吗?

StringBuffer
用作类的成员变量时,线程安全性很有用。但是如果它是一个局部变量,那么
StringBuilder
就更好了,因为局部变量没有线程安全的概念。

您必须以非常具体的方式使用生成器来注意
StringBuilder
StringBuffer
之间的速度差异。在99%的用例中,没有明显的差异,而与现代JIT相比,这是由于锁省略造成的

但是,正如其他人所注意到的,您可以在您的情况下自由地使用
StringBuilder

可能有用: