본문 바로가기

Programinng/Java

자바(Java) 에서의 volatile


위는 네이버에서 검색한 volatile의 사전적인 의미이다. 


volatile 키워드로 선언된 변수는 여러 스레드에 의해서 값이 변경 될 수 있다는 것이다. 그 뜻이 무엇이냐면, 64bit인 Long의 값을 32bit 운영체제에서 오퍼레이션 하려면  두번 나누어서 연산을 하게 된다. 이는 Multi Thread에서 원자성의 문제가 생기게 된다.


즉,


int i = 0;

i++;


일때 i의 값인 0이 캐시 메모리에 올라간 뒤, 1이 더해진다. 

그리고 그 더해진 값이 i로 저장된다.

이렇게 연산이 MOV, ADD, MOV 세개로 나뉘어 진다. 


하지만, volatile키워드를 사용하면, 변수의 값을 캐시한 캐시메로리가 아닌 메모리에서 직접 그 값을 읽어온다. 그렇기 때문에 항상 최신의 값을 읽어 올 수 있다.