ほげにっき

hogedigoの日記

StringBufferとStringBuilder

「StringBuilderはスレッドセーフじゃないって書いてありました。StringBuffer使って下さい」と怒られた。その後の会話。


ぼく「いや、参照をローカル変数にしか格納してないんだから大丈夫ですよ。」
あっち「でも、万が一を考えないと。。」
ぼく「万が一って・・・参照をフィールドに格納しちゃう、とかですか?そもそもStringBuilderをフィールドに置くケースってあんまりないし、そういうケースではそのクラスそのものを同期化するべきでしょ?」
あっち「(???)でも、難しいこと考えずにStringBuffer使っておけば安全ですよね?」
ぼく「○○さんもArrayListとかHashMapとか、使いまくっとるじゃないですか?これスレッドセーフじゃないクラスですよ。」
あっち「え?そうなんですか?それはまずいですね。」
ぼく「じゃなくて、そのクラスが複数スレッドからアクセスされるかどうか、アクセスされたときにキケンか安全か、常に考えてコーディングしないとアカンのですよ」



この人はまだ問題意識がある分マシだ。スレッドという言葉を聞くと完全に思考が停止する開発者、本当にたくさんいるから。とりあえずsynchronizedつけとけば安全かな・・みたいな。

WEB系開発はマルチスレッドプログラミングなのだが、イイ感じに隠蔽されちゃっているので、非常に危ない。単体テストレベルでは問題も発生しにくいし。