最近看到一篇关于单例模式较为详细的讲解的文章:https://coolshell.cn/articles/265.html 下面对此文章进行摘录 (Java)
// version 1.0 最为朴素的单例模式实践;
public class Singleton {
private static Singleton singleton = null;
private Singleton() { }
public static Singleton getInstance() {
if (singleton== null) {
singleton= new Singleton();
}
return singleton;
}
}
singleton特点:
singleton多线程版本优化:
// version 1.4 多线程强化版本,使用双重检查和 volatile 进行屏蔽多线程作用;
public class Singleton
{
private volatile static Singleton singleton = null;
private Singleton() { }
public static Singleton getInstance() {
if (singleton== null) {
synchronized (Singleton.class) {
if (singleton== null) {
singleton= new Singleton();
}
}
}
return singleton;
}
}
// version 1.5 把类的创建委托给类装载器来进行创建;
public class Singleton
{
private volatile static Singleton singleton = new Singleton();
private Singleton() { }
public static Singleton getInstance() {
return singleton;
}
}
// version 1.6 使用私有内部类来进行隐藏,使得只有再getInstance 函数被调用的时候,类才会被闯将,使得类的创建可控;
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
使用上面三个版本进行创建,都可以保证线程安全;具体相关的议论,可以参考:https://coolshell.cn/articles/265.html
保持更新;更多内容请关注cnblogs.com/xuyaowen;