Java では、コードの重要なセクションが同時にアクセスされないように保護するために synchronized キーワードが使用されます。これにより、同期されたメソッドまたはブロックを実行できるスレッドは一度に 1 つだけになります。ただし、静的メソッドには関連付けられたオブジェクトがないため、同期された静的メソッドの動作はインスタンス メソッドの動作とは若干異なります。
質問:
静的メソッドの場合関連オブジェクトがありません。synchronized キーワードはそれらにどのような影響を与えますか?具体的には、オブジェクトではなくクラスをロックしますか?
答え:
はい。同期された静的メソッドが呼び出されると、メソッドのクラスの Class オブジェクトに関連付けられたモニターを取得します。これは、同じ静的同期メソッドを実行しようとする複数のスレッドが、続行する前にクラスのロックを取得する必要があることを意味します。
詳細:
Java 言語で説明したとおり仕様 §8.4.3.6、「同期メソッド」:
クラス (静的) メソッドの場合、メソッドのクラスの Class オブジェクトに関連付けられたモニターが使用されます。
これにより、静的同期が保証されます。メソッドを使用すると、特定のインスタンスではなく、クラス自体に関連付けられたリソースを保護できます。たとえば、静的メソッドがクラス内の共有カウント変数にアクセスする場合、そのメソッドを同期して、複数のスレッドが同時にアクセスしてデータの不整合が生じる可能性を防ぐことができます。
以上が同期された静的メソッドは Java のクラス オブジェクトをロックしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。