java オブジェクトロックとクラスロックの違いは
Java オブジェクトロックとクラスロックの違いは、次のとおりです。
- ロックの範囲:オブジェクトロックはオブジェクトインスタンスに対して行われ、各オブジェクトインスタンスごとに個別にロックがかけられます。一方、クラスロックはクラスに対して行われ、そのクラスにいくつオブジェクトインスタンスがあってもロックは一つだけです。
- ロック取得:オブジェクトロックはsynchronizedキーワードで取得し、インスタンスメソッドやインスタンスコードブロックに使用できます。クラスロックはsynchronizedキーワードを静的メソッドに追加するか、Classオブジェクトを使用して取得します。
- 影響範囲:オブジェクトロックは同じオブジェクトインスタンス上の他のスレッドにのみ影響し、異なるオブジェクトインスタンス間のスレッドは影響を受けません。クラスロックは、クラス全体のすべてのオブジェクトインスタンス上の他のスレッドに影響します。
- ロックの解放: スレッドが同期されたコードブロックまたはメソッドの実行を終えると、オブジェクトロックとクラスロックが自動的に解放される。
- ロック競合:オブジェクトロックは同じオブジェクトインスタンス上でのスレッド競合にのみ影響するが、クラスロックはすべてのオブジェクトインスタンス上でのスレッド競合に影響する。
総じてオブジェクトロックはオブジェクトインスタンスを対象にしており、各インスタンスはロックを独自に持ち、同じインスタンス上のスレッドにのみ影響を与えるが、クラスロックはクラスを対象にしており、ロックは1つだけで、クラス内のすべてのインスタンス上のスレッドに影響を与える。