Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのオブジェクトレベルロックとクラスレベルロックの違い


マルチスレッド環境では、2つ以上のスレッドが共有リソースに同時にアクセスする可能性があり、システムの動作に一貫性がなくなる可能性があります。 Javaは、ロックの概念を使用して、共有リソースまたはオブジェクトの同時アクセスを制限します。ロックは2つのレベルで適用できます-

  • オブジェクトレベルのロック-非静的メソッドが必要な場合、またはコードの非静的ブロックに1つのスレッドのみがアクセスする必要がある場合に使用できます。
  • クラスレベルのロック-実行時に使用可能なすべてのインスタンスで複数のスレッドが同期ブロックに入らないようにする場合に使用できます。静的データスレッドを安全にするために常に使用する必要があります。
オブジェクトレベルのロック
Sr。いいえ。
キー
クラスレベルのロック

1

基本

非静的メソッドが必要な場合、またはコードの非静的ブロックに1つのスレッドのみでアクセスする必要がある場合に使用できます

実行時に使用可能なすべてのインスタンスで複数のスレッドが同期ブロックに入らないようにする場合に使用できます

2

静的/非静的

非静的データスレッドを安全にするために常に使用する必要があります。

静的データスレッドを安全にするために常に使用する必要があります。


3

ロックの数

クラスが独自のロックを持つ可能性のあるすべてのオブジェクト

クラスの複数のオブジェクトが存在する可能性がありますが、常に1つのクラスのクラスオブジェクトロックを使用できます

クラスレベルロックの例

public class ClassLevelLockExample {
   public void classLevelLockMethod() {
      synchronized (ClassLevelLockExample.class) {
         //DO your stuff here
      }
   }
}

オブジェクトレベルロックの例

public class ObjectLevelLockExample {
   public void objectLevelLockMethod() {
      synchronized (this) {
         //DO your stuff here
      }
   }
}

  1. Javaでのスレッドとランナブルの違い

    新しい実行スレッドを作成するには、2つの方法があります。 1つは、クラスをThreadクラスのサブクラスとして宣言することです。このサブクラスは、Threadクラスのrunメソッドをオーバーライドする必要があります。その後、サブクラスのインスタンスを割り当てて開始できます。 スレッドを作成するもう1つの方法は、Runnableインターフェースを実装するクラスを宣言することです。次に、そのクラスはrunメソッドを実装します。次に、クラスのインスタンスを割り当て、スレッドの作成時に引数として渡して、開始することができます。 すべてのスレッドには、識別のための名前があります。複数のスレッドが同じ

  2. Javaのオブジェクトレベルロックとクラスレベルロック?

    両方のオブジェクトレベルのロック およびクラスレベルの場所 kは、同期を実現するために使用されます マルチスレッドアプリケーションのメカニズム。 オブジェクトレベルのロック Javaのすべてのオブジェクトには一意のロックがあります 。スレッドが同期メソッドを実行したい場合 特定のオブジェクトでは、最初にそのオブジェクトのロックを取得する必要があります。スレッドがロックを取得すると、そのオブジェクトに対して同期されたメソッドを実行できるようになります。メソッドの実行が自動的に完了すると、スレッドはロックを解除します。 内部でのロックの取得と解放は、 JVMによって処理されます。 。 オブジェクト