Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Down
- 통계
- Decorator pattern
- Singleton
- 프록시
- Design Pattern
- C
- Video
- 이클립스
- 데코레이터 패턴
- Double Checking Locking
- 오피스
- Media
- WEB
- 디자인 패턴
- Renderer
- 엑셀
- 데이터
- 프로그래밍 언어
- C++
- 국제운전면허증
- stapleton
- 엑셀 여러창 띄우기
- 데이터 마이닝
- penfield
- 싱글턴
- proxy
- r
Archives
- Today
- Total
Kaboom
[Design Pattern]5. Singleton Pattern 본문
- Lazy Instantiation : 싱글턴 객체를 필요한 상황이 닥치기 전에는 생성하지 않고 있게 됨.
- 싱글턴 패턴 : 해당 클래스의 인스턴스가 하나만 만들어지고, 어디에서든지 그 패턴에 접곤할 수 있기 휘한 패턴임.
- 멀티쓰레드에서 접근 가능하기 때문에 동기화된 상태로 유지해야 함.
- getinstance() 코드 블럭 전체를 동기화 시킬 때 발생하는 문제 - 불필요한 성능 저하
- 해결 방법 : 속도가 별 상관 없다면 그냥 둔다.
- 인스턴스 생성을 클래스 로딩 타임에 하도록 코드를 수정한다.
- Double-Checking Locking 사용
- 인스턴스가 NULL 일 때만 동기화 블록을 써서 생성하는 동안에만 적용
- volatile keyword in JAVA : volatile는 각기 다른 thread가 같은 값을 보도록(visibility) 보장. volatile은 컴파일러가 특정 변수에 대해 옵티마이져가 캐슁을 적용하지 못하도록 하는 키워드. 이문제는 멀티 쓰레드에서 while문 이나 for문이 옵티마이져에 의해 캐쉬를 사용하는데, 변수 변경을 감지하지 못할 수 있음. 즉 동기화 문제가 발생할수 있음. 예를 들어 한쓰레드에서 다른 쓰레드의 작업이 마치기를 기다리면 while문을 돌고 있는데 volatile 키워드를 사용하지 않은 변수를 사용하면 캐쉬를 해버려 영원히 루프를 빠저 나오지 못하는 경우가 발생함. 물론 동기화 객체를 이용하는 것이 정석인데 volatile 키워드를 사용해도 작동함.
'Design Pattern' 카테고리의 다른 글
[Design Pattern]9. Iterator Pattern & Composite Pattern (0) | 2012.11.13 |
---|---|
[Design Pattern]7. Adapter Pattern (0) | 2012.11.13 |
[Design Pattern]4. Factory Pattern (0) | 2012.07.02 |
[Design Pattern]3. Decorator Pattern (0) | 2012.06.25 |
[Design Pattern]2. Observer Pattern (0) | 2012.06.14 |
Comments