同期ロックのアップグレードはどのような原則でありますか?

ローからハイへのロックレベル:

ロックなし - >バイアスロック - >軽量ロック - >ロックヘビー級

 

ロックサブレベルの理由:

以前の最適化、sychronizedヘビー級ロック(悲観的ロック)、待機を使用して、スレッドの状態は非常にシステムリソースを消費して切り替えるように、のnotifyAllを通知し、スレッドが中断し、ウェイクアップ間隔が非常に短いですが、これは資源や衝撃性能の無駄ではありません。最適化されたsychronizedキーワードにそうJVM、ロックにノーロックは、ロック、ロック、軽量、ヘビー級ロック状態になる傾向があります。

 

ロックなし:正常に変更されるまで、リソースのロックなし、すべてのスレッドがアクセスして変更同じリソースを1つだけのスレッドが成功を変更することができ、同時に、他の変更がスレッドを失敗することは、再試行していきます。

 

ロックをバイアス:オブジェクトコードが常に同じスレッドで実行され、競争の複数のスレッドが存在しない、自動的以降の実装でロックを取得スレッドは、ロック取得は、パフォーマンス・オーバーヘッドをもたらし減らします。バイアスされたロックは、バイアスにバイアスバイアスされ、ロックを競う別のスレッドの試行がリリースされるときにのみ、ロックの解放を求めていない最初のロックスレッドを指します。

失効ロックバイアスされ、何のバイトコードが実行されていない必要があり、最初のスレッドがある時点でロック付勢懸濁した後、オブジェクトはロックがロックされているかどうかを決定することです。スレッドがアクティブでない場合、ヘッドオブジェクトは非ロック状態に設定され、バイアスされたロックを撤回します。

スレッドがアクティブである場合、ステータス軽量ロックにアップグレード。

 

ロック軽量:ロックは、タイムロック付勢されている第二のスレッドBによってアクセスされたとき、それは軽量バイアスロックロックにアップグレードされ、この時間は、スレッドBはスピンの形で試みること軽量ロック手段ロックを取得し、スレッドは、パフォーマンスが向上し、ブロックされません。

現在は一つだけ待機しているスレッド、スレッドがスピンで待機します。スピンの一定数以上、軽量ロックがヘビー級ロックにアップグレードされる時期でも、スレッドがすでにロック、スピンで別のスレッドが、この時間を保持しているときに第三のスレッドが訪れ、光ミドルロックはヘビー級のロックにアップグレードされます。

 

ヘビー級のロック:ロックの取得を待機している他のすべてのスレッドがブロッキング状態になります後に一つのスレッドがロックを獲得することを意味します。

達成するためのモニター(モニター)によって、オブジェクト内部のヘビーロック、基礎となるオペレーティングシステムミューテックスロックの実装に依存しているのモニターと自然、スレッド間の切り替えオペレーティングシステムはカーネルモードにユーザーモードから切り替える必要があり、スイッチングコストが非常にあります高いです。

 

ロック状態の比較:

 

パートの抜粋:


 


 

すべてのリソースのリソースは、公共号に要約されています



 

 

おすすめ

転載: www.cnblogs.com/ConstXiong/p/11976058.html