ホームページ  >  記事  >  Java  >  Java ロックとは何ですか?

Java ロックとは何ですか?

青灯夜游
青灯夜游オリジナル
2019-11-15 16:24:205371ブラウズ

Java ロックとは何ですか?

ロックは、Java 並行プログラミングにおける最も重要な同期メカニズムです。ロックは、java.util.concurrent パッケージの Synchronized キーワードおよび関連クラスを通じて JAVA に実装されます。

Java におけるロックの概念

スピン ロック: スレッドがロックを取得するときに、そのロックが別のスレッドによって取得されている場合、そのスレッドはループ内で待機し、ロックが正常に取得できるかどうかを継続的に判定し、ロックが取得されるまでループは終了しません。

楽観的ロック: 競合がないと仮定し、データを変更する際に、以前に取得したデータと不整合があった場合、最新のデータを読み込み、変更後に再度変更を試みます。 ##悲観的ロック: 同時実行性の競合が発生すると想定し、データに対するすべての関連操作を同期し、データの読み取り時にロックを開始します

排他的ロック (書き込み): リソースに書き込みロックを追加します。ロックはリソースを変更でき、他のスレッドはそれ以上のロックを追加できません (単一書き込み)

共有ロック (読み取り): リソースに読み取りロックを追加した後は、読み取りのみ可能ですが変更はできません。追加できるのは読み取りロックのみで、書き込みロックは追加できません (複数の読み取り)

リエントラント ロック: スレッドはロックを取得した後、同じロックと同期して自由にコードに入ることができます

非リエントラントlock: スレッドはロックを取得した後、同じコードを自由に入力できません。 ロックを同期するためのコードです。

#Fair lock: ロックの競合順序は先着順です

不公平なロック: ロックの競合の順序は先着順ではありません

Java におけるいくつかの重要なロック実装メソッド:

synchronized、ReentrantLock、ReentrantReadWriteLock

同期キーワード:

synchronized

ロック範囲:

オブジェクト ロック、クラス ロック、分散ロック

同期機能:

リエントラント、排他的、悲観的ロック

ロックの最適化:

ロックの削除は、コンパイラ レベルで発生するロックの最適化方法です。コンパイラが実行中です。一部のコードの同期が必要ですが、共有データに対するロックの競合がないことが検出されました。 Eliminate (ロックの削除をオンにするためのパラメータ: -xx: DoEscapeAnalysis -XX: EliminateLocks)

Lock粗密化: 場合によっては、欠点を減らすために、多くのロック リクエストを 1 つのリクエストにマージする必要があります。一定期間内に大量のロック リクエスト、同期、解放が原因でパフォーマンスが低下します。

注: 同期されたロック リクエストは、キーワードは同期を実現するだけでなく、JMM では synchronized が可視性を確保する必要がある (キャッシュできない) と規定しています

synchronized 使用法のコード例:

public class Counter {
private static int i = 0;
// 等价于 synchronized(this)
public synchronized void update() {
i++;
}
public void updateBlock() {
synchronized (this) {
i++;
}
}
// 等价于 synchronized (Counter.class)
public static synchronized void staticUpdate() {
i++;
}
public static void staticUpdateBlock() {
synchronized (Counter.class) {
i++;
}
}
}

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。