Java の同期された静的メソッド: クラスまたはオブジェクトのロック
オブジェクトに関連付けられたインスタンス メソッドとは異なり、静的メソッドには何もありません。明示的なオブジェクト参照。ここで疑問が生じます: 静的メソッドが同期されるとき、キーワードはクラスまたはオブジェクトをロックしますか?
Java ドキュメントによると、同期されたメソッドは、「同期されたメソッドを 2 回呼び出すことは不可能である」ことを保証します。同じオブジェクト上でインターリーブします。」ただし、静的メソッドの場合、関連付けられたオブジェクトはありません。
クラス オブジェクトのロック取得
明確にするために、静的メソッドの synchronized キーワードはクラスをロックします。オブジェクトそのものではなく、オブジェクトです。 Java 言語仕様 (セクション 8.4.3.6) では、次のように述べられています。
「クラス (静的) メソッドの場合、メソッドのクラスの Class オブジェクトに関連付けられたモニターが使用されます。」
したがって、2 つのスレッドが同じクラス上で同期された静的メソッドを実行する場合、それらはシリアル化され、一度に 1 つのスレッドのみが実行されることが保証されます。
要約すると、静的メソッドの同期を理解することが重要です。インスタンスメソッドとは動作が異なります。静的メソッドはクラス オブジェクトのロックを取得し、共有データへの制御されたアクセスを提供し、同時実行を防ぎます。
以上がJava の静的メソッドで「synchronized」キーワードは何をロックしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。