
该模式有三个基本要点:
class Singleton {
private static Singleton singleton;
private Singleton(){}
public static Singleton getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
解决多线程单例对象会创建多个实例的问题,有多个解决方案:
class Singleton2 {
private static Singleton2 singleton2;
private Singleton2(){}
public static synchronized Singleton2 getInstance(){
if(singleton2 == null){
singleton2 = new Singleton2();
}
return singleton2;
}
}
class Singleton3 {
private static Singleton3 singleton3;
private Singleton3(){}
public static Singleton3 getInstance(){
if(singleton3 == null){
synchronized (Singleton3.class){
if(singleton3 == null){
singleton3 = new Singleton3();
}
}
}
return singleton3;
}
}
class Singleton4 {
private volatile static Singleton4 singleton4;
private Singleton4(){}
public static Singleton4 getInstance(){
if(singleton4 == null){
synchronized (Singleton4.class){
if(singleton4 == null){
singleton4 = new Singleton4();
}
}
}
return singleton4;
}
}
class Singleton5 {
private static class SingletonHolder{
public static Singleton5 singleton5 = new Singleton5();
}
public static Singleton5 getInstance(){
return SingletonHolder.singleton5;
}
}