- ベストアンサー
StringBuilderのマルチスレッド
StringBuilderとStringBufferの使い分けについて教えてください。 StringBuilderの方がアクセスが早いが、スレッドセーフではないので、 マルチスレッド環境ではStringBufferを使わないといけないと思います。 マルチスレッド環境で、新しくインスタンスを作り、その中でStringBufferを使う分には 大丈夫なのでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ほかのスレッドから同じタイミングでアクセスされる可能性があるためよ。 それぞれのソースを見てもらうとわかるけど StringBufferのappendはsynchronizedされているの。 そのため、同じタイミングでappendが発生しても アクセス順にappendが活かされるわ。 StringBulderの場合同じタイミングで来ると どっちかの処理がなかったことにされる可能性があるわね。 こんな感じで通信先の変数というのも 同期タイミングを意識しなくてはいけないわ。
その他の回答 (1)
- askaaska
- ベストアンサー率35% (1455/4149)
回答No.1
基本はStringBuilderでいいわ。 HttpSessionに格納したり 通信オブジェクトのにするなら StringBufferにしなくてはだめ。 完全なローカル処理ならStringBuilderよ。
質問者
お礼
ご回答ありがとうございます。 Webシステムも作っていますが、HttpSessionや通信オブジェクトはどうして 駄目なのでしょうか。 マルチスレッド環境でStaticな領域に使用するのは駄目なのは理解しているつもりですが、 HttpSessionはインスタンスを作って入れるので良いのかと思っておりました。
お礼
ありがとうございました。 ソース見れるのですね。助かりました。