• ベストアンサー

StringBuilderのマルチスレッド

StringBuilderとStringBufferの使い分けについて教えてください。 StringBuilderの方がアクセスが早いが、スレッドセーフではないので、 マルチスレッド環境ではStringBufferを使わないといけないと思います。 マルチスレッド環境で、新しくインスタンスを作り、その中でStringBufferを使う分には 大丈夫なのでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

ほかのスレッドから同じタイミングでアクセスされる可能性があるためよ。 それぞれのソースを見てもらうとわかるけど StringBufferのappendはsynchronizedされているの。 そのため、同じタイミングでappendが発生しても アクセス順にappendが活かされるわ。 StringBulderの場合同じタイミングで来ると どっちかの処理がなかったことにされる可能性があるわね。 こんな感じで通信先の変数というのも 同期タイミングを意識しなくてはいけないわ。

take_0121
質問者

お礼

ありがとうございました。 ソース見れるのですね。助かりました。

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

基本はStringBuilderでいいわ。 HttpSessionに格納したり 通信オブジェクトのにするなら StringBufferにしなくてはだめ。 完全なローカル処理ならStringBuilderよ。

take_0121
質問者

お礼

ご回答ありがとうございます。 Webシステムも作っていますが、HttpSessionや通信オブジェクトはどうして 駄目なのでしょうか。 マルチスレッド環境でStaticな領域に使用するのは駄目なのは理解しているつもりですが、 HttpSessionはインスタンスを作って入れるので良いのかと思っておりました。

関連するQ&A