>  기사  >  Java  >  Java 동시 프로그래밍에서 잠금 및 동기화 장치를 사용하는 방법은 무엇입니까?

Java 동시 프로그래밍에서 잠금 및 동기화 장치를 사용하는 방법은 무엇입니까?

PHPz
PHPz원래의
2024-05-08 22:06:02814검색

Java는 공유 리소스에 대한 액세스를 관리하기 위해 잠금 및 동기화 장치를 제공합니다. ReentrantLock과 같은 잠금은 한 번에 하나의 스레드만 중요 섹션에 액세스하도록 허용하는 반면, Semaphore 및 CountDownLatch와 같은 동기화 장치는 리소스에 동시에 액세스하는 스레드 수를 제한하거나 모든 스레드가 작업을 완료할 때까지 기다리는 등 보다 유연한 동시성 제어를 제공합니다. . 이러한 메커니즘을 사용하면 데이터 경합을 효과적으로 방지하고 애플리케이션 성능을 향상할 수 있습니다.

Java 并发编程中如何使用锁和同步器?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.