【初心者】Java質問・相談スレ47【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0162デフォルトの名無しさん
NGNGスレッドAがstr.length()メソッド内を実行しているときスレッドBがstr.length()を呼び出しても大丈夫でしょうか?
length()はこの場合文字列長を得るだけなので、特に問題はなさそうですが
実はlength()メソッドの中で内部変数に値を書いて、読み出しているかもしれませんよね。
これがStringBufferクラスのappend()メソッドを複数スレッドで呼んだらどうでしょう。
バッファに文字列を追加して、現在の文字列長を読み出して値を足しこみ、また文字列長を書き出す。
という操作が内部であると思うのですが。
Stringクラスのドキュメントにはスレッド共有するなとは特に書かれていないので
オブジェクトをスレッド共有で使ってもいいのでしょうか?
また、新たにクラスを作る場合はクラス内でスレッド競合が起こらないように作る必要があるのでしょうか?
新たに作るクラスがスレッド競合に対応していなければ、呼び出し元で同期を行うように明示する必要があるのでしょうか?
漠然とした質問ですみません。
■ このスレッドは過去ログ倉庫に格納されています