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

ReentrantLockとJavaで同期されたものの違い


複数のスレッドによって共有リソースをロックするには、2つの方法があります。 1つはリエントラントロック(またはReadWriteLock)で、もう1つは同期メソッドを使用する方法です。

ReentrantLockクラスは、Java5のJava同時実行パッケージで提供されています。

これはロックインターフェースの実装であり、Javaのドキュメントによると、ロックインターフェースの実装は、同期メソッドを使用して取得できるよりも広範な操作を提供します。

同期
Sr。いいえ。 キー ReentrantLock
1
ロックを取得
リエントラントロッククラスは、スレッドによって共有リソースのロックを取得するためのlock()メソッドを提供します
ロックを取得するには、同期されたキーワードを記述するだけです。
2
リリースロック
ロックを解除するには、プログラマーはunlock()メソッドを呼び出す必要があります
暗黙的に行われます
3
割り込み機能
lockInterruptibly()メソッドを使用して、スレッドを中断できます
スレッドを中断する方法はありません
4
公平性
このクラスのコンストラクターには公平性パラメーターがあります。 trueに設定されている場合、ロックは最も長く待機しているアクセスの許可を優先します
* スレッド
ロックは特定のアクセス順序を保証するものではありません
5
ロック解除順序
ロックは任意の順序で解除できます
ロックは、取得したのと同じ順序で解放する必要があります

ReentrantLockの例

public class ReentrantLockExample implements Runnable{
   private Lock lock=new ReentrantLock();
   @Override
   public void run() {
      try {
         lock.lock()
         //Lock some resource

      }
      catch (InterruptedException e) {
         e.printStackTrace();
      }
      finally {
         lock.unlock();
      }
   }
}

SynchronizedLockの例

public class SynchronizedLockExample implements Runnable{
   @Override
   public void run() {
      synchronized (resource) {
         //Lock some resource
      }
   }
}

  1. Javaでのイテレータと列挙の違い

    IteratorとEnumerationはどちらも、コレクションの要素をトラバースしてアクセスするためのカーソルです。どちらもコレクションフレームワークに属しています。列挙は、コレクションフレームワークのJDK1.2バージョンのJDK1.0およびIteratorで追加されました。 コレクション内の要素への読み取り専用アクセス権があるため、列挙型はコレクション内の構造を変更できません。次の方法があります: * hasMoreElements() * nextElement() 一方、イテレータはコレクション内の要素を読み取って削除できます。以下の方法があります- * hasNe

  2. JavaでのArrayListとHashSetの違い

    HashSetとArrayListはどちらも、Javaコレクションフレームワークの最も重要なクラスの一部です。 以下は、ArrayListとHashSetの重要な違いです。 Sr。いいえ。 キー ArrayList ハッシュセット 1 実装 ArrayListはリストインターフェイスの実装です。 一方、 HashSetは、セットインターフェイスの実装です。 2 内部実装 ArrayListは、その実装のために配列を内部的に実装します。 HashSetは、実装にHashmapを内部的に使用します。 3 要素の順序 ArrayListは、挿入順序、つまり