- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同期について)
同期についての疑問
このQ&Aのポイント
- あるオブジェクトの同期方法についての疑問です。
- ケース1とケース2の違いを教えてください。
- ケース1とケース2のgetInstanceメソッドを比較しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
この2つは同じ機能ではありません。 ケース1ではinstanceというフィールドに対して排他制御がかかりますが、ケース2は静的オブジェクトTestに対して排他制御がかかります。 排他制御は制御対象が同じオブジェクト同士でないとかかりません。 なので、ケース1とケース2は挙動が違ってきます。 具体的には、ケース1とケース2のメソッドは互いに排他制御されません。 一般的にはケース2のようなメソッド単位で排他制御するよりもケース1のブロック単位で制御するほうが小回りが利いて使いやすいです。 なお、ブロック単位の排他制御は、synchronized文の引数オブジェクトが未定義やnullの場合はNullPointerExceptionが飛ぶので注意してください。