Javaでよく見られるロックのまとめ

1213 ワード

Javaでよく見られるロックのタイプ
よく見られるロックの分類は、排他ロック、共有ロック、楽観ロック、悲観ロック、セグメントロック、スピンロック、公平ロック、非公平ロック、再入ロックなどがあります.
排他ロックと共有ロック
  • synchronizedは排他ロックであり、ReentrantLockも排他ロックであり、ReentrantReadWriteLockは読み取り共有ロックであり、書き込み排他ロック
  • である.
    楽観ロックと悲観ロック
  • 楽観ロックと悲観ロックは1種のロックの思想で、楽観ロックは同時データの修正に対して楽観的な態度を持って、CASの非ロック方式を通じてデータの修正を試みて、悲観ロックはデータの修正に対して保守的な態度を持って、修正はすべてそれのロックをプラスして、よくデータベースの隔離レベルと結合して
  • セグメントロック
  • セグメントロックもロック思想であり、jdk 8の前のConcurrentHashMap、jdk 8の後にCAS+synchronizedを採用するなど、データセグメントに対するロックは同時効率を向上させた.hashCodeでインデックスを計算すると、データセグメントにロック
  • が付加される.
    スピンロック
  • は、絶え間ないポーリングによってロックを取得しようとするCPU時間を占有する非ブロックロックであり、ロックの待ち時間が短いと効率が高い
  • である.
    フェアロックと非フェアロック
  • 同期ロックはスレッド申請ロックの順序に従い、非同期は保証されない.synchronizedおよびReentrantLockはいずれも非同期ロックである.ReentrantLockは、構造方法において同期ロック
  • として指定することができる.
    リエントロック可能
  • は再帰ロックとも呼ばれ、具体的には外部申請ロックの操作がロックを取得すると、内部申請ロックの操作もロックを取得し、プロセス中に要求保持原則を破壊してデッドロックを予防するのと同じように、すべての申請が成功するか、またはすべての失敗
  • である.
    ロック解除
    JVMはロックされたコードを追加して逃走分析を行い、単一スレッドであることが判明した場合、コードに追加されたロックを削除して最適化します.
    synchronizedはJVM階層で実現されており、高同時性の場合、性能はコード階層で実現されたロックよりも効率的ではないが、synchronizedはずっと最適化されており、現在は差が大きくなく、公式に推奨されている方式である.