「文字列をロックオブジェクトとして利用したい」場合がある。 例えば渡されたファイルに処理をするメソッドで、ファイルごとに排他処理をしたいとする。しかしファイルをそのままロックオブジェクトとして使ってはいけないのは明らかだ。File インスタンスは同じファイルを指していても別のインスタンスだからだ。 // これをやってはいけない! public void doSomething(File file){ synchronized(file){ ... } } これを回避しようとして、ファイルの絶対パスをロックオブジェクトとして使う案が出てくる。しかしこれもやってはいけない。理由は上記ファイルと同様、同じ文字列を持つオブジェクトであっても別々のインスタンスであることがあるからだ。 // これをやってはいけない! public void doSomething(File file){ String