ホームページ  >  記事  >  Java  >  Javaにおけるロックと同期の違いは何ですか

Javaにおけるロックと同期の違いは何ですか

WBOY
WBOY転載
2023-04-17 19:19:051298ブラウズ

1. 機能の観点から見ると、

LockSynchronized は両方とも、スレッド セーフティの問題を解決するために Java で使用されるツールです

2. 特性の観点から見ると、

Synchronized は Java の同期キーワードであり、Lock は J.U.C パッケージで提供されるインターフェイスであり、このインターフェイスには、ReentrantLock などの重要なものを含む多くの実装クラスがあります。ロックを実装するために、Synchronized は 2 つの方法でロックの強度を制御できます。

Javaにおけるロックと同期の違いは何ですか

1 つは、メソッド レベルで synchronized キーワードを変更することです。 1 つ目はコード ブロックを変更することです。ロック オブジェクトのライフ サイクルを通じてロックのスコープを制御できます。ロック オブジェクトが静的オブジェクトまたはクラス オブジェクトの場合、ロックはグローバル ロックです。ロック オブジェクトが通常のインスタンス オブジェクトである場合、ロックのスコープはインスタンスのライフ サイクルによって決まります。Lock におけるロックの粒度は、lock() メソッドと unlock() によって決まります。その中で提供されるメソッド

Javaにおけるロックと同期の違いは何ですか

上に示すように:

lock() メソッドと unlock() メソッドの間のコードは次のことができます。スレッドの安全性を確保し、ロックの範囲は Lock インスタンスのライフサイクルによって異なります。 Lock は Synchronized よりも柔軟です。Lock は、いつロックするか、いつロックを解放するかを個別に決定できます。必要なのは、lock() メソッドと lock メソッドを呼び出すことだけです。Lock は、ノンブロッキングの競合ロック メソッドも提供しますは tryLock() と呼ばれます。このメソッドは、true/false を返すことで、他のスレッドがすでにロックを使用しているかどうかを現在のスレッドに伝えることができます。また、Synchronized はキーワードであるため、ノンブロッキングを実装することは不可能です。競合ロック方式。Synchronizedロックの解放は受動的です。同期コード ブロックの実行が完了した後、またはコード内で例外が発生した場合にのみ解放されます。ロックは公平なロックを提供します。不公平なロックの仕組み 公平なロックとは、スレッドがロック リソースをめぐって競合するときに、他のスレッドがすでにキューに登録されているか、ロックが解放されるのを待っていることを意味します。その場合、現在ロックをめぐって競合しているスレッドはキューに飛び込むことができません。スレッドがロックのキューにある場合、スレッドはロックをめぐって競合しようとします。同期は不公平なロックの実装のみを提供します。 3. パフォーマンスの観点から見ると、

Synchronized

はパフォーマンスの点ではロックとあまり変わりませんが、実装にはいくつかの違いがあります。 ロックの最適化を達成するために、バイアスされたロック、軽量ロック、重量ロック、ロック アップグレード メカニズムを導入し、Lock はパフォーマンスの最適化を達成するためにスピン ロックを使用します

以上がJavaにおけるロックと同期の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。