자바 휘발성 키워드 구현 원리

가시성 문제를 소개하는 장면

지도에서 첫번째보기 :

위의 차트는 스레드가 자신의 작업 메모리뿐만 아니라 공유 메인 메모리를 가지고, 자바 메모리 모델의 단순화 된 버전입니다.

스레드 1 스레드 2는 그 값을 사용하기 전에 작업 메모리에 메인 메모리 부하 값 데이터 변수로 시작하는 데이터의 데이터를 읽을 때.

스레드 1 수정 된 데이터 변수는 다음이 자신의 작업 메모리에 대한 변경 사항을 기록, 1 가정하자. 그러면 이때의 작업 메모리, 상기 데이터 값을 1 또는 0 주 메모리 내의 데이터의 값의 쓰레드 (1). 쓰레드 (2)의 작업 메모리 데이터 값은 제로이다.

이것은 당황 스레드 1, 스레드 2 가변 데이터로 동작되지만 때문에 스레드 변수를 변경하는 하나의 데이터 쌍을 생성 스레드 로컬 캐시에, 스레드 2 시간에서 볼 수 없다.

이것은 자바 동시성 문제의 가시성 : 스레드가 공유 변수의 값을 수정하면, 다른 스레드는 즉시 수정 여부를 알 수 있습니다.

그것은 위의 자바 메모리 모델이 매우 단순화 된 것을 주목할 가치가있다, 실제 상황은 훨씬 더 복잡하다.

원리 및 휘발성의 역할

위의 문제 가시성을 해결하기 위해, 우리는 사용할 수있는 휘발성 키워드를.

휘발성 키워드를 추가 한 후, 스레드 1은 변수의 값만큼 데이터를 수정, 동시에 메인 메모리로 플러시 수정을 강요 작업 메모리 데이터 변수의 값을 수정하는 것입니다. 하는 동시에, 2 실 따라서마다 최신 판독 값을 2 실을 확보 작업 메모리에 주기억 값의 리프레시를 강제하는 데이터 변수를 판독 할 필요가있다. 도는 다음과 같습니다 :

휘발성 작동 원리가되는 기본 원리 JVM 구현은, 상술 한 개념에 메모리 배리어를 포함한다 . 간단히 말하면, 얼굴 JVM 휘발성 시간 변수는, 그 기록 동작 후에 저장소 배리어 삽입이 판독되기 전에로드 장벽을 삽입한다.

추천

출처www.cnblogs.com/bluemilk/p/11269505.html