Lock()、UnLock()、ReentrantLock()、TryLock()とは何ですか?Javaの同期ブロックとの違いは何ですか?]

公開: 2020-07-05

このチュートリアルでは、Lock()、UnLock()、ReentrantLock()、TryLock()、およびJavaの同期ブロックとの違いについて説明します。

以下の質問もある場合は、適切な場所にいます。

  • Javaでのロック
  • Javaロックの例と同時実行ロックと同期
  • Java同時実行チュートリアル–リエントラントロック
  • 同期–Javaの適切なロック/ロック解除の使用法
  • java –同期とロック
  • Javaロックロック解除の例
  • Javaのロックメカニズム
  • Javaロックは別のスレッドのロックを解除します

始めましょう。 まず、これらの各用語を理解してから、実際の例を見ていきましょう。

ロック():

java.util.concurrent.locks 。 ロックは同期ブロックのようなスレッド同期メカニズムですが、ロックはJavaの同期ブロックよりも高度な場合があります。 これは、組み込みの同期およびモニターとは異なる条件をロックおよび待機するためのフレームワークを提供するインターフェースおよびクラスです。

UnLock():

UnLock()は、オブジェクトのロックを解除します。

ReentrantLock():

ReentrantLockは、最後に正常にロックされたスレッドによって所有されていますが、まだロック解除されていません。 ロックが別のスレッドによって所有されていない場合、ロックを呼び出すスレッドは戻り、 lockを正常に取得します。 現在のスレッドがすでにロックを所有している場合、メソッドはすぐに戻ります。

TryLock():

TryLock()は、呼び出し時にロックが解放されている場合にのみロックを取得します。

ヒント-1

単にオブジェクトをロックしている場合は、 synchronized.

同期されている場合、間違いを犯すことは非常に明確で不可能です。

例の詳細:

  1. クラスを作成します:CrunchifyLockTutorial.java
  2. 内部クラスを作成する:CompanyとCrunchifyLoop
  3. Mainから、Companyクラスの2つのオブジェクトを作成します
  4. それらのオブジェクトで10のスレッドループを開始します
  5. Company1がCompany2と通信している間、オブジェクトをロックします。 同時に、 Company2Company1と通信したい場合は、「競合」と表示されます。ロックはすでに存在します。 (両社はすでに話し合っています)。

出力:

ヒント-2

java.util.concurrentのユーティリティは、 synchronizedvolatilewaitなどの低レベルのプリミティブを使用してすべてを実行できます。