/**
* 餓漢模式(線程安全)
*/
public class Singleton1 {
private Singleton1(){
}
private static Singleton1 instance = new Singleton1();
public static Singleton1 getInstance(){
return instance;
}
}
/**
* 懶漢模式(線程不安全)
*/
public class Singleton2 {
private Singleton2(){
}
private static Singleton2 instance;
public static Singleton2 getInstance(){
if(instance==null){
instance = new Singleton2();
}
return instance;
}
}
/**
* 通用單例模式
*/
public class Singleton3 {
private static final Singleton3 singleton = new Singleton3();
private Singleton3(){
}
private synchronized static Singleton3 getInstance(){
return singleton;
}
}
/**
* 雙檢查的加鎖的單例模式
*/
public class Singleton4 {
private static volatile Singleton4 singleton;
private Singleton4(){
}
private static Singleton4 getInstance(){
if(null == singleton){
synchronized(Singleton4.class){
if(null == singleton){
singleton = new Singleton4();
}
}
}
return singleton;
}
}