나는 약간의 디자인 패턴에 대해 배우고 놀라운 싱글 톤을 발견했다!싱글 톤 쓰레드를 안전하지 않게 만들 때
싱글 톤 패턴을 구현하는 주요 방법은 두 가지가 있습니다. 하나는 스레드 안전 (synchronized
키워드 사용)이고 다른 하나는 스레드로부터 안전하지 않습니다.
이 아닌 경우은 싱글 톤 스레드를 안전하게 만들려고합니까? 원래의 프로그램 디자인이 쓰래드를 구현하지 않더라도, 미래의 반복이 그 필요성을 가질 것이라고는 말할 수 없을 것입니다. 싱글 톤 스레드를 안전하게 만들 때 성능 저하가 있습니까? 아니면 싱글 톤 thread-safe에 유리하지 않은 곳에서 내가 놓친 다른 이유가 있을까요?
예 스레드 안전 싱글 :
/**
* Thread Safe Singleton Pattern
*
*/
public class Database {
private volatile static H2 uniqueInstance;
public static H2 getInstance() {
if (Database.uniqueInstance == null) {
synchronized (Database.class) {
if (Database.uniqueInstance == null) {
/**
* Instantiate First and Only instance of H2
*/
Database.uniqueInstance = new H2();
}
}
}
return Database.uniqueInstance;
}
private Database() {};
}
예 비 스레드 안전 싱글 :
/**
* Non Thread Safe Singleton Pattern
*
*/
public class Database {
private volatile static H2 uniqueInstance;
public static H2 getInstance() {
if (Database.uniqueInstance == null) {
/**
* Instantiate First and Only instance of H2
*/
Database.uniqueInstance = new H2();
}
}
return Database.uniqueInstance;
}
private Database() {};
}
(현대) Java에서 싱글 톤을 만드는 적절한 방법을 고려하십시오 (Josh Bloch 또는 [이 기사] (http://www.informit.com/articles/article.aspx?p= 1216151 & seqNum = 3))은 자동 스레드 안전성을 초기화하는 "enum"을 사용하는 것입니다 ... 왜 당신이 원했을 지 모르겠습니다. –