Java 同期静的メソッド: クラス ロックの謎を解く
Java synchronized キーワードにより、同期メソッドの実行中に複数のスレッドがインターリーブしないことが保証されます同じオブジェクト上で。しかし、静的メソッドが同期済みとして宣言されるとどうなるでしょうか?静的メソッドはクラスのインスタンスに関連付けられていないため、それでもロックを取得しますか?
静的同期メソッドの領域を探索する
答えは、同期された静的メソッドのセマンティクス。 Java 言語仕様 (JLS) によると、
クラスレベルのロックの場合
これは、静的メソッドが同期されるときに、その宣言クラスの Class オブジェクトに関連付けられたモニターを取得することを意味します。したがって、同じクラス内のすべての同期された静的メソッドは同じモニターを共有し、これらのメソッドの同時実行を防ぎます。
使用例の例
次の例を考えてみましょう。
public class Counter { private static int count = 0; public static synchronized void increment() { count++; } }
この例では、increment() メソッドが静的として宣言され、同期されています。これにより、スレッドが count 変数を同時に操作することがなくなり、Counter クラスのすべてのインスタンスにわたってその整合性が維持されます。
結論
一方、静的メソッドは直接関連付けられない場合があります。オブジェクトを使用する場合でも、クラス モニターでロックを取得します。これにより、同じクラス内の同期された静的メソッドが排他的に実行できるようになり、データの不整合が防止され、クラス内のスレッドの安全性が維持されます。
以上がJava 同期静的メソッドはどのようにしてロックを取得しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。