複数の部分から文字列を作成していて、どちらStringBuffer
かを使用したい、または使用したいStringBuilder
。Java 5 docs から、可能な場合はそれが推奨されることがわかりますが、次StringBuilder
の点に注意してください。
のインスタンスは
StringBuilder
、複数のスレッドで安全に使用できません。
StringBuilder
このステートメントから、単一のインスタンスを複数のスレッドで共有するべきではないことがわかります。しかし、次の場合はどうでしょうか。
//Is this safe?
//foo() is called simultaneously by multiple threads
String foo(String a, String b) {
return new StringBuilder(a).append(b).toString();
}
ここでは、StringBuilder
クラスを同時に使用して関数内に同時に複数のスレッドが存在する可能性がありますが (たとえば、静的変数が存在する場合は、その変数への同時アクセスなど)、各スレッドは独自のStringBuilder
. ドキュメントから、これが複数のスレッドによる使用としてカウントされるかどうかを判断することはできません。