3

SpringControllerでプライベートユーティリティメソッドを作成しています。

StringBufferまたはを使用する必要がありますStringBuilder。前者はスレッドセーフであり、後者はそうではありませんが、後者ははるかに高速です。

基本的に、次のようになります。

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

明らかに、2つのセッションでこれを同時に呼び出してガベージを返すことは望ましくありません。

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%です。

しかし、他の人が気付くように、あなたはStringBuilderあなたのケースで自由に使うことができます。

于 2012-08-26T13:17:11.350 に答える