3

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

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

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

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

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

4

3 回答 3

12

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

于 2012-08-26T13:11:29.850 回答
5

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

于 2012-08-26T13:11:55.217 回答
2

您必须以非常具体的方式使用构建器来注意StringBuilder和之间的速度差异StringBuffer。在 99% 的用例中,没有可观察到的差异,而对于现代 JIT,它是 100% 的,因为lock elision

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

于 2012-08-26T13:17:11.350 回答