リソースの競合がそれほど激しくない場合、Synchronized のパフォーマンスは ReetrantLock よりも優れています。ただし、リソースの競合が激しい場合、Synchronized のパフォーマンスは数十分の 1 に低下しますが、ReetrantLock のパフォーマンスは通常のままである可能性があります。
(1) これはなぜですか? (2) ReentrantLock は軽量ロックですか?軽量ロックとは何ですか?名前だけは聞いたことがあるが、具体的な実装は見たことがない
仅有的幸福2017-05-17 10:05:59
まず第一に、あなたが言及した状況は、ReentrantLock が最初に Java 1.5 に導入されたときにのみ存在しました。Java 1.6 では、基本的に ReentrantLock の実装と一致する Synchronized の実装アルゴリズムが変更されているため、2 つの間のパフォーマンスの差はすでに非常に大きくなっています。小さい。
軽量ロックに関しては、これは Java 1.6 で導入されたロックのパフォーマンスを向上させる方法であり、JVM レベルに属しており、特定の実装はありません。
ロックが解放されるまで待ちたい場合は、Lock.lock()を使用してロックを取得できます。Lock.tryLock()を使用するとロックを取得しようとしているため、ロックを取得できない場合があります。
ringa_lee2017-05-17 10:05:59
同期された読み取りページと書き込みページは相互に排他的であることが簡単に理解できますが、ReentrantLock は読み取りロックと書き込みロックを共有できますが、ここから見ると、ReentrantLock は読み取りと書き込みのロックを共有します。書き込み量を減らすとパフォーマンスは大幅に向上しますが、コードは同期よりも複雑になり、制御が適切でないと問題が発生しやすくなります。