volatile과 synchronized 키워드. 무엇을 하는 녀석들인가?


volatile과 synchronized 키워드 멀티스레드 환경에서 읽고, 쓰기에 대해서 원자성을 보장해주는 동기화 도구입니다. 


그렇다면 두 키워드의 차이는 무엇인가?


차이점을 간략히 한 줄로 설명하자면, volatile은 변수에 한해서만 동기화를 해주는 도구이며, synchronized는 작업에 대해서 동기화를 지원해주는 도구입니다.

한줄만으로는 이해하기 힘들것이므로 가볍게 예를 하나 들어보겠습니다. 

long stat = 324L;

위와 같은 변수 선언에서의 stat에 대한 volatile키워드는 stat에 대해서 서로 다른 스레드로부터 읽고 쓰기에 대한 원자성을 보장해줍니다. 스레드 A, 스레드 B가 읽고 쓰면서 같은 변수에 대해서 다른 값을 읽어가는 것을 방지해주죠.

int value = stat + 10;

위와 같은 경우가 조금 다릅니다. 

내부적으로 JVM은 value 변수를 읽어오고, stat 변수를 읽어오며, 10을 더하는 동작이 분리되어 있습니다. 이 같은 경우 어떤 스레드가 stat에 10이 더해진 변수 value를 읽어 갈 수도 있고, 그렇지 않을 수도 있다는 것입니다. 


하지만 synchronized키워드는 작업 자체에 대해 원자성을 보장해주는 도구이므로 이 같은 문제를 해결 할 수 있습니다. 

이 것이 synchronized와 volatile키워드의 차이인 것입니다. 


'JAVA' 카테고리의 다른 글

List, Map, Set - Collection  (0) 2015.08.29
자바 8 특징  (0) 2015.08.29
인스턴스 메소드 vs 클래스(스태틱) 메소드  (0) 2015.08.25
자바 Null Pointer Exception막는 방법  (0) 2015.08.18
자바 제네릭(Generic)이란?  (0) 2015.08.06
Posted by slender ankles
,