volatile 키워드는 멀티thread시에 도움이 된다.
1. 읽고 쓰기에 대한 원자성. ( byte단위의 원자화는 보장함. alignment는 맞춰줌. )
2. 컴파일러의 임의 리오더링을 방지.
반면,
synchronized는 블록으로 묶인 부분 혹은 변수를 원자화(makes atomic ) 함.
<Wikipedia singleTon 예제>
public class SingletonDemo {
private static volatile SingletonDemo instance = null;
private SingletonDemo() { }
public static SingletonDemo getInstance() {
if (instance == null) {
synchronized (SingletonDemo.class){
if (instance == null) {
instance = new SingletonDemo();
}
}
}
return instance;
}
}