読み取り/書き込みロック メカニズムにより、複数のスレッドが同時にデータを読み取ることができますが、データを書き込むことができるのは 1 つのスレッドのみです。 Java では、ReentrantReadWriteLock クラスを使用して読み取り/書き込みロックを実装できます。 読み取りロック: 書き込み操作をブロックすることなく、複数のスレッドが同時に読み取りアクセスを取得できるようにします。書き込みロック: 排他的な書き込みアクセスを取得し、他のすべての読み取り/書き込み操作をブロックします。
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 サイトの他の関連記事を参照してください。