您的位置:首页 > 其它

单例的7种写法

2017-10-18 21:48 239 查看
懒汉模式-线程不安全

12345678910111213

public class Singleton {
private static Singleton instance;
private Singleton (){

}

public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}

懒汉模式-线程安全

12345678910111213

public class Singleton {
private static Singleton instance;
private Singleton (){

}

public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}

饿汉模式

1234567891011

public class Singleton {
private static Singleton instance = new Singleton();

private Singleton (){

}

public static Singleton getInstance() {
return instance;
}
}

饿汉模式-变种

1234567891011121314

public class Singleton {
private Singleton instance = null;

static {
instance = new Singleton();
}

private Singleton (){

}
public static Singleton getInstance() {
return this.instance;
}
}

静态内部类

12345678910111213

public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}

private Singleton (){

}

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

双重校验锁

12345678910111213141516

public class Singleton {
private volatile static Singleton singleton;
private Singleton (){

}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}

枚举

12345

public enum Singleton {
INSTANCE;
public void whateverMethod() {
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: