Java Spring控制器是线程安全的吗?
我正在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
StringBuffer
或StringBuilder
。前者是线程安全的,后者不是,但后者要快得多
基本上,它看起来是这样的:
private String buildTextToDisplay() {
StringBuffer sb = new StringBuffer();
sb.append( ... );
return sb.toString();
}
显然,我不希望两个会话同时调用它并返回垃圾。因为
sb
是一个局部变量,所以它不需要是线程安全的。(每个线程都有自己对唯一的StringBuilder
,对吗?当StringBuffer
用作类的成员变量时,线程安全性很有用。但是如果它是一个局部变量,那么StringBuilder
就更好了,因为局部变量没有线程安全的概念。您必须以非常具体的方式使用生成器来注意StringBuilder
和StringBuffer
之间的速度差异。在99%的用例中,没有明显的差异,而与现代JIT相比,这是由于锁省略造成的
但是,正如其他人所注意到的,您可以在您的情况下自由地使用StringBuilder
。可能有用: