>  기사  >  Java  >  스레드 안전을 달성하기 위해 Java 함수에서 이중 확인 잠금을 구현하는 방법은 무엇입니까?

스레드 안전을 달성하기 위해 Java 함수에서 이중 확인 잠금을 구현하는 방법은 무엇입니까?

WBOY
WBOY원래의
2024-05-03 11:48:01935검색

이중 확인 잠금은 이중 확인을 통해 스레드 안전성을 보장하는 디자인 패턴으로 다음과 같이 Java 함수에서 구현할 수 있습니다. 인스턴스가 비어 있으면 인스턴스를 저장할 정적 휘발성 변수를 정의하고 동기화에서 다시 확인합니다. 블록, 비어 있으면 인스턴스가 생성됩니다. 실제 사례: 공유 리소스 시나리오(예: 캐시 클래스)에서 이중 확인 잠금을 사용하면 모든 스레드가 동일한 공유 인스턴스를 사용하도록 보장하여 데이터 경쟁을 피하고 데이터 무결성을 보장할 수 있습니다.

Java 函数中的双重检查加锁如何实现线程安全?

Java 함수의 이중 검사 잠금: 스레드 안전성을 달성하는 실제 예

이중 검사 잠금은 이중 검사를 사용하여 인스턴스가 한 번만 생성되도록 보장하는 디자인 패턴입니다. 스레딩 스레드로부터 안전합니다. Java 함수에서 이중 확인 잠금을 구현하는 방법은 다음과 같습니다.

public class Singleton {
    private static volatile Singleton instance;

    private Singleton() {
        // ...省略构造函数逻辑
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

실용 사례: 스레드 공유 리소스

여러 스레드가 동시에 캐시된 데이터에 액세스할 수 있는 캐시 클래스와 같은 리소스를 스레드가 공유하는 시나리오를 고려해보세요. 시간. 데이터 경쟁 조건을 방지하려면 캐시 개체가 한 번만 생성되고 모든 스레드가 안전하게 액세스할 수 있도록 해야 합니다.

public class Cache {
    private static volatile Cache instance;

    public static Cache getInstance() {
        if (instance == null) {
            synchronized (Cache.class) {
                if (instance == null) {
                    instance = new Cache();
                }
            }
        }
        return instance;
    }

    // 此处省略缓存逻辑
}

// 使用缓存
List<String> sharedData = new ArrayList<>();
sharedData.add("Item 1");
sharedData.add("Item 2");

for (int i = 0; i < 10; i++) {
    new Thread(() -> {
        Cache cache = Cache.getInstance();
        // 使用共享数据,例如将它添加到缓存中
        cache.put("Key" + i, sharedData);
        cache.get("Key" + i);
    }).start();
}

위의 예에서 Cache 클래스는 모든 스레드가 캐시 개체를 사용하도록 이중 확인 잠금을 사용합니다. 동일한 공유 인스턴스. 이렇게 하면 여러 캐시 인스턴스가 생성되는 것을 방지하여 스레드 안전성과 데이터 무결성을 보장합니다.

위 내용은 스레드 안전을 달성하기 위해 Java 함수에서 이중 확인 잠금을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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