Java マルチスレッド同時実行ロックの詳細な説明

WBOY
リリース: 2024-04-11 16:21:01
オリジナル
1006 人が閲覧しました

Java 同時実行ロック メカニズムにより、マルチスレッド環境では共有リソースに 1 つのスレッドのみがアクセスできるようになります。その種類には、悲観的ロック (ロックを取得してからアクセスする) と楽観的ロック (アクセス後に競合を確認する) があります。 Java は、ReentrantLock (ミューテックス ロック)、Semaphore (セマフォ)、ReadWriteLock (読み取り/書き込みロック) などの組み込み同時実行ロック クラスを提供します。これらのロックを使用すると、複数のスレッドが共有変数カウンターに同時にアクセスしたときに、1 つのスレッドだけがその値を更新するなど、共有リソースへのスレッドセーフなアクセスを保証できます。

Java マルチスレッド同時実行ロックの詳細な説明

#Java マルチスレッド同時実行ロックの詳細な説明

はじめに

マルチスレッド環境では、複数のスレッドが共有リソースに同時にアクセスし、データの不整合やプログラム エラーが発生する可能性があります。これを防ぐために、Java は同時実行ロック メカニズムを提供し、一度に 1 つのスレッドだけが共有リソースにアクセスできるようにします。

同時実行ロックのタイプ

Java には、次の 2 つの主なタイプの同時実行ロックがあります。

  • 悲観的ロック (悲観的ロック) : すべてのスレッドが共有リソースにアクセスすると想定されているため、共有リソースにアクセスする前にロックが取得されます。これにより、コンテキストの切り替えがより頻繁になりますが、同時実行性が低下します。
  • オプティミスティック ロック: ほとんどのスレッドは共有リソースにアクセスしないと想定されているため、競合は共有リソースにアクセスした後にのみチェックされます。競合が発生した場合、操作はロールバックされます。これにより、コンテキストの切り替えが少なくなりますが、その代償として競合が発生する可能性が高くなります。

Java の同時実行ロック

Java では、次の組み込み同時実行ロック クラスが提供されます:

  • ReentrantLock: リエントラント ミューテックス、つまりスレッドは同じロックを複数回取得できます。
  • セマフォ: 共有リソースにアクセスする同時スレッドの最大数を制御するために使用されるカウント セマフォ。
  • ReadWriteLock: 複数のスレッドが共有リソースを同時に読み取ることを許可しますが、共有リソースへの書き込みを許可するのは 1 つのスレッドのみです。

実際的なケース

共有変数

counter に同時にアクセスする 2 つのスレッドがあり、次のことを確認したいとします。一度にスレッドは 1 つだけです。counter の値を更新します。 ReentrantLock を使用してこれを実現できます:

public class Counter {

    private int counter;
    private ReentrantLock lock = new ReentrantLock();

    public int getCounter() {
        lock.lock();
        try {
            return counter;
        } finally {
            lock.unlock();
        }
    }

    public void incrementCounter() {
        lock.lock();
        try {
            counter++;
        } finally {
            lock.unlock();
        }
    }
}
ログイン後にコピー

この例では、

getCounter() メソッドと incrementCounter() メソッドの両方で ## を使用します。 # lock を使用して、counter へのアクセスがスレッドセーフであることを確認します。

以上がJava マルチスレッド同時実行ロックの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート