スレッドセーフだけど少しパフォーマンスが悪いです。本記事では、それぞれのクラスの特徴やおすすめの使い分けなど、コード例をまじえて解説していきます。おすすめの使い分け初めにおすすめの使い分けを簡単にまとめてしまいます。使わない複数のスレッドを使っている場合でも、単一スレッドからのみの操作に変更できないか?という設計の見直しをしてみる。使う明確に複数スレッドから更新することを意図して設計しているのであれば良いと思います。それぞれの特徴このクラスは、StringBufferと互換性があるAPIを提供しますが、同期化は保証されません。このクラスは、文字列バッファが単一のスレッド(一般的なケース)により使用されていた場合のStringBufferの簡単な代替として使用されるよう設計されています。このクラスは、ほとんどの実装で高速に実行されるので、可能な場合は、StringBufferよりも優先して使用することをお薦めします。公式API仕様からの引用です。優先して使うことをおすすめしていますね。簡単に表にまとめると次のようになります。スレッドセーフではありません。具体例を見てみましょう。20個のスレッドから合計101回実行されます。101回反転するので、結果として降順となります。reverseメソッドを合計101回呼び出します。reverseメソッドは文字列を逆順に並び変えるメソッドです。