휘발성 변수는 동기화된 가시성 속성을 가지지만 원자적 속성은 갖지 않습니다. 이는 스레드가 휘발성 변수의 최신 값을 자동으로 발견할 수 있음을 의미합니다. 휘발성 변수를 사용하여 스레드 안전성을 제공할 수 있지만 매우 제한된 사용 사례에만 사용할 수 있습니다. 여러 변수 사이 또는 변수의 현재 값과 수정된 값 사이에는 제약 조건이 없습니다. 따라서 휘발성만으로는 카운터, 뮤텍스 또는 여러 변수와 관련된 불변성을 포함하는 항목을 구현하는 데 충분하지 않습니다.
휘발성 키워드는 Java에서 약간 약한 동기화 메커니즘인데 왜 약한 메커니즘이라고 불리는 걸까요?
이를 이해하기 전에 먼저 Java가 동기화 시 준수해야 하는 두 가지 메커니즘을 살펴보겠습니다.
1. 가시성: 한 스레드가 공유 변수를 수정하면 다른 스레드가 읽을 수 있습니다. 이 수정된 값입니다.
2. 원자성: 불가분성을 의미합니다. 여기서는 프로그램 실행 중에 작업을 중단할 수 없으면 원자성 작업이라는 의미입니다.
휘발성 키워드는 원자성을 보장하지 않고 가시성을 보장하므로 일반적인 상황에서는 이 키워드를 동기화 작업에 사용할 수 없습니다. 단, 다음 두 가지 특정 조건이 충족되면 동기화에 사용할 수 있습니다.
1. 연산 결과는 변수의 현재 값에 의존하지 않거나 단일 스레드만 수정하는 것을 보장할 수 있습니다. 변수의 값.
2. 변수는 다른 상태 변수와 함께 불변 제약 조건에 참여할 필요가 없습니다.
예:
volatile boolrean flag; public void close(){ flag = true; } public void open(){ while(!flag){ ... } }
이에 time open() 메서드의 실행은 플래그 값에 따라 달라지며 동기화를 사용해야 하지만 동기화를 위해 다른 메서드를 사용하는 것은 번거롭습니다. 이 경우 위의 두 가지 조건을 충족하는 시나리오입니다. 이므로 휘발성 키워드를 동기화에 사용할 수 있습니다.
휘발성 키워드의 원리:
휘발성으로 수정된 변수는 레지스터나 다른 위치에 캐시되지 않으며, 각 쓰기는 메인 메모리에 직접 기록됩니다. 읽기의 경우에도 마찬가지입니다. 따라서 가시성이 보장됩니다.
이상은 에디터가 소개한 Java의 휘발성 키워드 사용 시 주의사항입니다. 문의사항이 있으시면 메시지를 남겨주시면 에디터가 답변해드리겠습니다. 시간에. 또한 PHP 중국어 웹사이트를 지원해 주신 모든 분들께 감사드립니다!
Java에서 휘발성 키워드 사용 시 주의사항에 대한 자세한 관련 글은 PHP 중국어 홈페이지를 참고해주세요!