[Java] Double-checked locking 을 사용하지 말자! |
Double checked locking 이란?
보통 synchronized block 은 performance 이슈를 부르기 쉽다.
double-checked locking 이 performance 이슈를 조금 완화시켜준다.
double-checked locking 은 null check 와 같은 부분을 synchronized 밖으로 빼서
synchronized 를 기다리지 않고 처리하게 만들어 준다.
volatile 을 주면 read, write 가 sync 로 걸릴 경우 write 를 먼저 하게 하고, read 를 나중에 하게 한다.
volatile 이 없다면 반대로 read 를 보통 먼저 하고 write 를 나중에 한다고 한다.
double-check + volatile 이 double-checked locking.
Double checked locking 을 사용하지 말자!
이렇게 double checked locking 에 대해 알아봤는데, double checked locking 은 안전하지 못하다고 한다.
Multi-processor 가 shared-memory 를 사용하면서 문제가 발생하기 쉽다고 한다.
일부에서는 일반 object 를 lock 으로 잡지않고, synchronized 를 이용하면 가시성이 확보되어서 괜찮다는 의견도 있지만, 아직도 논란이 있다.
괜히 논란이 되어 이상하게 작동하는 프로그램을 만드느니,
우선은 performance 보다는 안정성을 선택하는 것이 좋아보인다.
이 부분에 대해서는 추후 공부를 해서 다시 포스팅하도록 하겠다.
<참고 자료>
http://c2.com/cgi/wiki?DoubleCheckedLockingIsBroken
http://blog.naver.com/PostView.nhn?blogId=jjoommnn&logNo=130036635345&parentCategoryNo=4&viewDate¤tPage=1&listtype=0
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] make screen awake, no sleep (2) | 2014.04.01 |
---|---|
더 안정적인 GCM 구현을 위해 주의할 점. (2) | 2014.03.31 |
[Android] Blurring Technique faster than RenderScript (0) | 2014.03.27 |
Eclipse 에서 Android Studio 로 넘어가기. (0) | 2014.03.27 |
[android] Actionbar 에 overflow menu 보여주기. (0) | 2014.03.27 |
댓글