Java单例模式

懒汉式单例

1.适用于单线程环境(不推荐)

1
2
3
4
5
6
public static Singleton getInstance(){
if(null==instance){
instance=new Singleton();
}
return instance;
}

2.适用于多线程环境,但效率不高(不推荐)

1
2
3
4
5
6
public static synchronized Snigleton getInstance(){
if(null==instance){
instance=new Singleton();
}
return instance;
}

3.双重检验锁(推荐)

1
2
3
4
5
6
7
8
9
10
public static Singleton getInstance(){
if(null==instance){
synchronized(Singleton.class){
if(null==instance){
instance=new Singleton();
}
}
}
return instance;
}

4.静态内部类(Effective Java 上推荐)

1
2
3
4
5
6
7
private static class SingletonHolder{
private static final Singleton INSTANCE=new Singleton();
}

public static final Singleton getInstance(){
return SingletonHolder.INSTANCE;
}

饿汉式单例

static final

1
2
3
4
5
private static final Singleton INSTANCE=new Singleton();

public static final Singleton getInstance(){
return INSTANCE;
}

枚举单例

enum

1
2
3
public enum EasySingleton{
INSTANCE;
}