이중 확인 잠금은 이중 확인을 통해 스레드 안전성을 보장하는 디자인 패턴으로 다음과 같이 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!