同期とロック、揮発性の違い

同期化され、揮発性の違い

  • 揮発性軽量スレッド同期を達成するため、同期揮発性で優れたパフォーマンスれます
  • voaltile修正変数、同期コードブロックと修正方法
  • マルチスレッドが起こる揮発性のアクセスをブロックしませんが、それは同期へのアクセスをブロックすることがあります
  • 揮発性データは、視認性を確保ますが、原子性を保証することはできません。両方の同期および原子、または間接的に保証され、視認性を保証します。
  • 解決策は、変数の複数のスレッドの可視性の中で揮発性であり、そして解決SYNCHRONIZED複数のスレッド間でのリソースへのアクセスの同期であります

ReentrantLockのと同期の違い

  • ロックがリエントラントです
  • 同期達成するためにJVMに依存し、そしてReentrantLockのJDKを完了しよう/ finally文ブロックと実装依存、APIレベル、必要なロック()とunlock()メソッドです。
  • 同期化された3つの機能よりもReentrantLockの:割り込み待ち時間は、選択的な通知を(ロックは、複数の条件をバインドすることができます)を有効に、公正なロックを達成することができます。

 

割り込み待機:スレッドが達成するために他のもの、lock.lockInterruptiblyによってReentrantLockの()に対処する代わりに待ってあきらめることを選択することができます割り込み手段を待ちます。

フェアロック:最初のスレッドがロックを獲得するために待機しています。唯一の非公正ロックシンクロナイズド。ReentrantLockのデフォルト以外の公平性が、ReentrantLockので指定することができる(ブールフェア)コンストラクタメソッドは、公正または不当なラッチロックです。

選択的確認応答:同期キーワードと待機()及び通知/のnotifyAll()メソッドは、待機/通知機構と連動して実施することができるが、スレッドがランダムに選択されるJVMによって通知されます。オブジェクト全体だけ単一条件オブジェクトに同期ロック同等のは、そのスレッドのすべてがターゲット本体に登録されています。スレッドがのnotifyAllを開始すると()、必要性は大きい効率の原因となります、何の権利を選択しないように、すべての待機しているスレッドを通知します。ReentrantLockのは、選択通知、より良い柔軟性のための条件オブジェクトを利用することができます。例えば:あなたは、複数の条件の場合(つまり、モニタオブジェクト)対象にロックを作成することができ、条件に指定されているように、スレッドのスレッド通知はsignalAll()メソッドは、ウェイクアップします場合でも、選択肢を持つことができ、登録することができます条件インスタンス内のすべての待機スレッドサイン。

リエントラントロック:彼らは再び自分自身の内部ロックを取得することができます。たとえば、次のようにオブジェクトのロックを取得するためのスレッド、およびスレッドは再びあなたはまだないリエントラントロックならば、それはデッドロックを引き起こす、中に取得することができ、オブジェクトのロックを取得したいときに解放されていません。

おすすめ

転載: www.cnblogs.com/jxxblogs/p/11928259.html