[英]Are Spring Controllers Thread-Safe?
我正在Spring Controller中編寫一個私有實用程序方法。
我需要使用StringBuffer
或StringBuilder
。 前者是線程安全的,后者不是,但后者要快得多。
基本上,它看起來像這樣:
private String buildTextToDisplay() {
StringBuffer sb = new StringBuffer();
sb.append( ... );
return sb.toString();
}
顯然,我不希望兩個會話同時調用它並返回垃圾。
由於sb
是局部變量,因此它不需要是線程安全的。 (每個線程都有自己對唯一StringBuilder
的引用,對吧?)
StringBuffer
線程安全性在用作類的成員變量時非常有用。 但是如果它是局部變量,那么StringBuilder
更好,因為對於局部變量沒有線程安全的概念。
您必須以非常特定的方式使用構建器來注意StringBuilder
和StringBuffer
之間的速度差異。 在99%的使用案例中沒有可觀察到的差異,而現代JIT則由於鎖定省略而100%。
但是,正如其他人注意到的那樣,您可以自由地使用StringBuilder
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.