同時学習ノート


Synchronized、ReentrantLockの違いは?
この両者の違いに答えるには、まず、再ロック可能、タイミングロック待機tryLock()、割り込みロック待機lockInterruptibly()の概念を理解しなければならない.ReentrantLockのlockメカニズムは2種類あり、割り込みロックと応答割り込みロックを無視する--ReentrantLockというクラスは、2つの競争ロックのメカニズムを提供している.公平ロックと非公平ロックである.Condition
=========================
≪再ロック可能|Reincludable|oem_src≫:現在のスレッドがすでにロックを持っていて、再度要求された場合、カウントは1増加します.
=========================
応答割り込みロックはJDK 5より前にSynchronizedを取得ロックのキーワードとして使用するが、Threadが呼び出されても、取得中に割り込むことはできない.interruptも中断しません.スレッドの迅速な応答を中断するためにlockを用いることができる.lockInterruptibly()メソッド.lock.lockInterruptibly()関数の特定の実行プロセスは、現在のスレッドが中断されない限りロックを取得します.ロックが他のスレッドに保持されていない場合は、ロックを取得してすぐに戻り、ロック保持カウントを1に設定します.現在のスレッドがこのロックを持っている場合は、カウントを1増加させ、メソッドはすぐに戻ります.ロックが別のスレッドによって保持されている場合、現在のスレッドはスレッドスケジューリングの目的で無効になり、ロックが現在のスレッドによって取得されるまでスリープ状態になります.または他のスレッドが現在のスレッドを中断します.ロックが現在のスレッドによって取得された場合、ロック保持カウントは1に設定されます.現在のスレッドの場合:このメソッドに入ると中断ステータスが設定されます.または、ロックの取得時に中断され、InterruptedExceptionが放出され、現在のスレッドの中断ステータスがクリアされます.この実装では、この方法は明示的な割り込み点であるため、ロックの正常な取得または再入取得ではなく、割り込みに対する応答を優先的に考慮する.
=========================
tryLockメソッドの解釈?ロックが所定の待ち時間内に他のスレッドに保持されず、現在のスレッドが中断されていない場合、ロックが取得される.ロックが他のスレッドに保持されていない場合は、ロックを取得し、すぐに値trueを返し、ロック保持カウントを1に設定します.このロックが公平なソートポリシーを使用するように設定されている場合、他のスレッドがロックを待っている場合、使用可能なロックは取得されません.これはtryLock()メソッドとは逆です.時間制限のある試みが必要な場合は、時間制限のあるフォームと時間制限のないフォームを組み合わせます(lock.tryLock()||ロック.tryLock(タイムアウト、単位){...}}現在のスレッドがこのロックを持っている場合は、カウントを1増加させ、trueを返します.ロックが別のスレッドによって保持されている場合、現在のスレッドはスレッドスケジューリングの目的で無効になり、ロックが現在のスレッドによって取得されるまでスリープ状態になります.または他のスレッドが現在のスレッドを中断します.または指定した待機時間実行ロックを取得した場合、値trueを返し、ロック保持カウントを1に設定します.現在のスレッドの場合:このメソッドに入ると中断ステータスが設定されます.または、ロックの取得時に中断され、InterruptedExceptionが放出され、現在のスレッドの中断ステータスがクリアされます.指定した待ち時間が経過すると、値falseが返されます.時間がゼロ以下の場合、このメソッドは待機しません.この実装では、この方法は明示的な割り込み点であるため、従来のまたは再入された取得ロックではなく、応答割り込みを優先的に考慮し、報告待ち時間の経過を報告する.指定:tryLock()in Lockパラメータ:タイムアウト待ちロックのタイムアウトパラメータの時間単位戻り:ロックがアイドルで、現在のスレッドによって取得された場合、またはロックが現在のスレッドによって所有されている場合.ロックを取得するまでの待ち時間が長すぎる場合、falseの放出:InterruptedException-現在のスレッドが中断されている場合Null PointerException-時間単位が空の場合
Condition ReentrantLockはConditionと組み合わせて使用でき、ConditionはReentrantLockロックの待機と解放に制御ロジックを提供する.
例えば、ReentrantLockロックを使用する後、それ自体のConditionを通過することができる.await()メソッドはロックを解放し、スレッドはここでConditionを待つ.Signal()メソッドを実行し、実行を続行します.await法はwhileサイクルに置く必要があるため,異なるスレッド間で同時制御を実現するにはvolatileの変数が必要であり,booleanは原子性の変数である.
ReentrantLock lock  = new ReentrantLock();
Condtion processReady = lock.newCondtion();

while(!isProcessReady) {  //isProcessReady  
      processReady.await();// lock, signal
     }

==================
スピンロックとは?多くのスレッドはロックを待っている間に、短い時間でロックを取得するので、スレッドが待っている間にスレッドを掛ける必要はなく、目的のないループを10回設定するのが一般的です.これにより、スレッド切替のオーバーヘッドが回避され、パフォーマンスが大幅に向上します.
=====================Synchronized、ReentrantLockの違い1.synchronizedはJVMレベルで実現され、いくつかのモニタリングツールを通じてsynchronizedのロックを監視することができるだけでなく、コード実行時に異常が発生し、JVMは自動的にロックを解放するが、Lockを使用するとだめで、lockはコードによって実現され、ロックが必ず解放されることを保証するには、unLock()をfinally{}に入れなければならない.2.資源競争が激しくない場合、Synchronizedの性能はReetrantLockより優れているが、資源競争が激しい場合、Synchronizedの性能は数十倍低下するが、ReetrantLockの性能は常態を維持することができる.3.ReentrantLockはSynchronizedと同じ同時性とメモリの意味を持つほか、ロック投票も多く、タイミングロック待ちと割り込みロック待ちスレッドAとBはいずれもオブジェクトOのロックを取得しなければならない.AがオブジェクトOのロックを取得したと仮定すると、BはAがOのロックを解放するのを待つ.synchronizedを使用すると、Aが解放されなければ、Bはずっと待っている.中断されない場合はReentrantLockを使用し、Aが解放されなければ、Bは、十分長い待ち時間が経過した後、待ち時間を中断する、別のこと(tryLock()、tryLock(timeout,unit)、またはlockInterruptibly()方法)4を行うことができる.ReentrantLockというクラスは、フェアロックと非フェアロックの2つの競合ロックのメカニズムも提供しています.この2つのメカニズムの意味は,マルチスレッドにとって公平ロックはスレッドが入る順序に依存し,後に入ったスレッドはロックを得るという文字通りである.フェアロックではなく、後から入ってきたロックは、前のロック待ちスレッドと同時にロックリソースを競合させることもできます.効率的には、もちろん非公平ロックの方が効率的です.公平ロックは、スレッドキューの最初のロックがスレッドにロックを取得させるかどうかを判断するからです.
=============
どんな場合にReentrantLockを使いますか?1.あるスレッドは、ロックの制御を待つ間に中断する必要がある.wait-notify、ReentrantLockの中のConditionアプリケーションを別々に処理する必要があり、notifyのどのスレッドを制御することができます.フェアロック機能により、到来するスレッドごとにキューが待機します.
=============ロック投票とは?
参考資料:http://baijiahao.baidu.com/s?id=1571946569081893&wfr=spider&for=pc https://www.cnblogs.com/2390624885a/p/6675876.html https://blog.csdn.net/fatherican/article/details/53674005 https://www.cnblogs.com/fanguangdexiaoyuer/p/5313653.html https://blog.csdn.net/u012403290/article/details/64910926?locationNum=11&fps=1