ホームページ  >  記事  >  Java  >  Java 関数の読み取り/書き込みロック メカニズムはどのようにしてスレッド セーフを実現しますか?

Java 関数の読み取り/書き込みロック メカニズムはどのようにしてスレッド セーフを実現しますか?

WBOY
WBOYオリジナル
2024-05-04 17:33:01660ブラウズ

読み取り/書き込みロック メカニズムにより、複数のスレッドが同時にデータを読み取ることができますが、データを書き込むことができるのは 1 つのスレッドのみです。 Java では、ReentrantReadWriteLock クラスを使用して読み取り/書き込みロックを実装できます。 読み取りロック: 書き込み操作をブロックすることなく、複数のスレッドが同時に読み取りアクセスを取得できるようにします。書き込みロック: 排他的な書き込みアクセスを取得し、他のすべての読み取り/書き込み操作をブロックします。

Java 函数中的读写锁机制如何实现线程安全?

Java 関数の読み取り/書き込みロック メカニズム: スレッド セーフを実現するためのガイド

読み取り/書き込みロックは同時実行制御です。このメカニズムにより、データの整合性への損傷を防ぎながら、複数のスレッドが同時にデータの読み取りと書き込みを行うことができます。 Java では、java.util.concurrent.locks パッケージの ReentrantReadWriteLock クラスを使用して、読み取り/書き込みロックを実装できます。

コンセプト

  • 読み取りロック: 書き込み操作をブロックすることなく、複数のスレッドが同時に読み取りアクセスを取得できるようにします。
  • 書き込みロック: 排他的書き込みアクセスを取得し、他のすべての読み取り/書き込み操作をブロックします。

実装

import java.util.concurrent.locks.ReentrantReadWriteLock;

public class ThreadSafeFunction {

    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();

    public int calculate(int x, int y) {
        lock.readLock().lock();
        try {
            // 读操作
            return x + y;
        } finally {
            lock.readLock().unlock();
        }
    }

    public void update(int x, int y) {
        lock.writeLock().lock();
        try {
            // 写操作
            // 更新数据
        } finally {
            lock.writeLock().unlock();
        }
    }
}

実用的なケース

共有カウンタを考えてみましょう。複数のスレッドが読み取りと書き込みを行うことができます。同時 :

public class SharedCounter {

    private int count;
    private final ThreadSafeFunction function;

    public SharedCounter() {
        function = new ThreadSafeFunction();
    }

    public int getCount() {
        return function.calculate(count, 0);
    }

    public void increment() {
        function.update(count, count + 1);
    }
}

マルチスレッド環境では、異なるスレッドがカウンターの読み取りロックまたは書き込みロックを同時に取得できるため、データの整合性が確保され、データの競合が回避されます。

以上がJava 関数の読み取り/書き込みロック メカニズムはどのようにしてスレッド セーフを実現しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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