읽기-쓰기 잠금은 여러 스레드가 공유 리소스를 동시에 읽을 수 있도록 허용하지만 한 번에 하나의 스레드만 쓸 수 있는 동시성 제어 메커니즘입니다. 주로 읽기 집약적인 워크로드와 산발적인 쓰기가 있는 애플리케이션에 사용됩니다. Java에서는 java.util.concurrent.locks.ReadWriteLock 인터페이스를 사용하여 읽기-쓰기 잠금을 구현할 수 있습니다. 여기서 읽기 잠금은 읽기 액세스를 허용하고 쓰기 잠금은 쓰기 액세스를 허용합니다. 예를 들어, 공유 카운터에서는 여러 스레드가 카운터 값을 동시에 읽을 수 있으며, 쓰기 스레드는 쓰기 원자성과 데이터 무결성을 보장하기 위해 카운터를 업데이트하기 위해 쓰기 잠금을 획득해야 합니다.
소개
읽기-쓰기 잠금은 여러 스레드가 공유 리소스를 동시에 읽을 수 있도록 허용하는 동시성 제어 메커니즘이지만 한 번에 하나의 스레드만 쓸 수 있습니다. 시간 공유 리소스를 입력하세요. 이는 읽기 집약적인 작업 부하와 간헐적인 쓰기 작업이 있는 애플리케이션에 유용합니다.
뮤텍스 잠금과 달리 읽기-쓰기 잠금을 사용하면 여러 독자가 공유 리소스에 동시에 액세스할 수 있고 작성자는 리소스에 독점적으로 액세스할 수 있습니다.
Java에서 읽기-쓰기 잠금 사용
Java의 java.util.concurrent.locks.ReadWriteLock 인터페이스는 읽기-쓰기 잠금 기능을 제공합니다. 여기에는 두 가지 유형의 잠금이 있습니다.
다음은 읽기-쓰기 잠금 사용의 예입니다.
import java.util.concurrent.locks.ReentrantReadWriteLock; public class SharedResource { private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); private int value; public void read() { lock.readLock().lock(); try { // 读取共享资源 System.out.println("Reading: " + value); } finally { lock.readLock().unlock(); } } public void write(int newValue) { lock.writeLock().lock(); try { // 写入共享资源 value = newValue; System.out.println("Writing: " + value); } finally { lock.writeLock().unlock(); } } }
실용 사례
단 하나의 스레드만 업데이트하는 동안 여러 스레드가 카운터 값을 읽는 공유 카운터를 생각해 보세요. 동시 액세스 중에 데이터 무결성을 보장하기 위해 읽기-쓰기 잠금을 사용할 수 있습니다.
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CounterExample { private final SharedResource counter = new SharedResource(); private final ExecutorService executor = Executors.newFixedThreadPool(10); public void run() { // 创建 10 个读取线程 for (int i = 0; i < 10; i++) { executor.submit(counter::read); } // 模拟写入线程 for (int i = 0; i < 100; i++) { executor.submit(() -> counter.write(i)); } executor.shutdown(); } public static void main(String[] args) { new CounterExample().run(); } }
이 예에서는 여러 읽기 스레드가 카운터 값을 동시에 읽을 수 있는 반면 쓰기 스레드는 카운터에 액세스하기 전에 쓰기 잠금을 획득합니다. 이는 쓰기 작업의 원자성과 데이터 무결성을 보장합니다.
위 내용은 Java의 동시 프로그래밍에서 읽기-쓰기 잠금은 어떻게 사용됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!