Java는 공유 리소스에 대한 액세스를 관리하기 위해 잠금 및 동기화 장치를 제공합니다. ReentrantLock과 같은 잠금은 한 번에 하나의 스레드만 중요 섹션에 액세스하도록 허용하는 반면, Semaphore 및 CountDownLatch와 같은 동기화 장치는 리소스에 동시에 액세스하는 스레드 수를 제한하거나 모든 스레드가 작업을 완료할 때까지 기다리는 등 보다 유연한 동시성 제어를 제공합니다. . 이러한 메커니즘을 사용하면 데이터 경합을 효과적으로 방지하고 애플리케이션 성능을 향상할 수 있습니다.
Java 동시 프로그래밍의 잠금 및 동기화 장치
동시 프로그래밍을 사용하면 여러 스레드가 동시에 실행될 수 있지만 공유 리소스에 대한 액세스를 관리하는 메커니즘이 필요합니다. Java는 이를 달성하기 위해 다양한 잠금 및 동기화 장치를 제공합니다.
Locks
잠금을 사용하면 한 번에 하나의 스레드만 중요 섹션(공유 리소스의 수정된 부분)에 액세스할 수 있습니다. 일반적으로 사용되는 잠금은 다음과 같습니다.
// 创建一个 ReentrantLock Lock lock = new ReentrantLock(); // 获取锁 lock.lock(); // 访问临界区 // ... // 释放锁 lock.unlock();
Synchronizer
Synchronizer는 잠금보다 더 발전되었으며 보다 유연한 동시성 제어를 제공합니다. 일반적으로 사용되는 동기화 장치는 다음과 같습니다.
Semaphore
Semaphore는 동시에 리소스에 액세스할 수 있는 스레드 수를 제한합니다.
// 创建一个 Semaphore,允许最多 3 个线程同时访问 Semaphore semaphore = new Semaphore(3); // 申请许可证 semaphore.acquire(); // 访问临界区 // ... // 释放许可证 semaphore.release();
CountDownLatch
CountDownLatch는 계속하기 전에 모든 스레드가 작업을 완료할 때까지 기다립니다.
// 创建一个 CountDownLatch,等待 10 个线程完成 CountDownLatch latch = new CountDownLatch(10); // 10 个线程执行任务 // ... // 每个线程完成后,计数器减一 latch.countDown(); // 主线程等待所有线程完成 latch.await();
실용 사례
다음은 Semaphore를 사용하여 동시에 계정에 액세스하는 스레드 수를 제한하는 은행 계좌 운영의 실제 사례입니다.
class BankAccount { private Semaphore semaphore = new Semaphore(1); private double balance; public void deposit(double amount) { try { semaphore.acquire(); balance += amount; } finally { semaphore.release(); } } public void withdraw(double amount) { try { semaphore.acquire(); balance -= amount; } finally { semaphore.release(); } } }
결론
잠금 및 동기화 장치를 사용하는 경우 Java 동시 프로그래밍 강력한 도구로 공유 리소스 액세스를 관리합니다. 이러한 메커니즘을 주의 깊게 사용하면 데이터 경합을 효과적으로 방지하고 프로그램 성능을 향상시킬 수 있습니다.
위 내용은 Java 동시 프로그래밍에서 잠금 및 동기화 장치를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!