单例模式写法

Posted Snow〃冰激凌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式写法相关的知识,希望对你有一定的参考价值。

第一种(懒汉,线程不安全):
public class Singleton {
    private static Singleton instance;
    private Singleton (){}
 
    public static Singleton getInstance() {
    if (instance == null) {
        instance = new Singleton();
    }
    return instance;
    }
}
 
第二种(懒汉,线程安全):
public class Singleton {
    private static Singleton instance;
    private Singleton (){}
    public static synchronized Singleton getInstance() {
    if (instance == null) {
        instance = new Singleton();
    }
    return instance;
    }
}
 
第三种(饿汉):
public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton (){}
    public static Singleton getInstance() {
    return instance;
    }
}
 
第四种(饿汉,变种):
public class Singleton {
    private Singleton instance = null;
    static {
    instance = new Singleton();
    }
    private Singleton (){}
    public static Singleton getInstance() {
    return this.instance;
    }
}
 
第五种(普通DCL):
public class Singleton {
    private static Singleton singleton;
    private Singleton (){}
    public static Singleton getSingleton() {
    if (singleton == null) {
        synchronized (Singleton.class) {
        if (singleton == null) {
            singleton = new Singleton();
        }
        }
    }
    return singleton;
    }
}
 
第六种(DCL):
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;
    }
}
 
第七种(DCL):
public class Singleton {
    private static Singleton singleton;
    private Singleton (){}
    public static Singleton getSingleton() {
    if (singleton == null) {
        synchronized (Singleton.class) {
        if (singleton == null) {
            Singleton tmp = new Singleton();
            singleton = tmp;
        }
        }
    }
    return singleton;
    }
}
 
第八种:
public class Singleton {
 
    private static class SingletonHolder{
          static final Singleton INSTANCE = new Singleton();
     }
 
    public static Singleton getSingleton() {
         return SingletomHolder.INSTANCE;
    }
    }
}

以上是关于单例模式写法的主要内容,如果未能解决你的问题,请参考以下文章

单例模式的七种写法

Java--设计模式之单例模式+保证线程安全的5种写法(懒汉内双枚)

单例模式(下)---聊一聊单例模式的几种写法

单例模式——懒汉式饿汉式

单例模式Java实现

单例模式的线程安全性?