English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

ReentrantLockとJavaの同期の違い

複数のスレッドで共有リソースをロックする方法は二つあります。一つは再入ロック(Or ReadWriteLock)で、もう一つはSynchronizedメソッドを使用することです。

Java 5のJava並行パッケージにReentrantLockクラスが提供されています。 

これはLockインターフェースの実装であり、java docsによると、Lockインターフェースの実装は同期メソッドを使用するよりも広範な操作を提供します。

番号キーリエントリーロック同期済み
1
ロックを取得する 
リエントリーロッククラスが提供しますlock()スレッドを通じて共有リソースのロックを取得する方法 
シンクロナイズキーワードを書くだけでロックを取得できます  
2
ロックの解放 
ロックを解放するには、プログラマーが呼び出さなければなりませんunlock()メソッド
暗黙的な完了 
3
 中断可能
lockInterruptible()メソッドを使用してスレッドを中断できます  
スレッドを中断する方法はありません
4
フェア 
このクラスのコンストラクタにはフェアパラメータがあります。trueに設定すると、最も長く待っているスレッドにロックが割り当てられます *スレッドのアクセス権限

ロックは特定のアクセス権限を保証しません
5
ロックの解放順番 
ロックはどの順番で解放してもかまいません 
ロックはロックを取得した順番で解放すべきです 

ReentrantLockの例

public class ReentrantLockExample implements Runnable{
   private Lock lock=new ReentrantLock();
   @Override
   public void run() {
      try {
         lock.lock()
         //一部のリソースをロックする
      }
      catch (InterruptedException e) {
         e.printStackTrace();
      }
      finally {
         lock.unlock();
      }
   }
}

SynchronizedLockの例

public class SynchronizedLockExample implements Runnable{
   @Override
   public void run() {
      synchronized (resource) {
         //一部のリソースをロックする
      }
   }
}