Stringクラスのオブジェクトstrがあるとします。
スレッドAがstr.length()メソッド内を実行しているときスレッドBがstr.length()を呼び出しても大丈夫でしょうか?

length()はこの場合文字列長を得るだけなので、特に問題はなさそうですが
実はlength()メソッドの中で内部変数に値を書いて、読み出しているかもしれませんよね。

これがStringBufferクラスのappend()メソッドを複数スレッドで呼んだらどうでしょう。
バッファに文字列を追加して、現在の文字列長を読み出して値を足しこみ、また文字列長を書き出す。
という操作が内部であると思うのですが。


Stringクラスのドキュメントにはスレッド共有するなとは特に書かれていないので
オブジェクトをスレッド共有で使ってもいいのでしょうか?

また、新たにクラスを作る場合はクラス内でスレッド競合が起こらないように作る必要があるのでしょうか?
新たに作るクラスがスレッド競合に対応していなければ、呼び出し元で同期を行うように明示する必要があるのでしょうか?

漠然とした質問ですみません。