单例模式

1.懒汉、线程不安全

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

2.懒汉、线程安全

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

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

3.饿汉

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

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

4.双重校验

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;  
    }  
}  

5.静态内部类

public class SingletonInner {
    private static class Holder {
        private static SingletonInner singleton = new SingletonInner();
    }

    private SingletonInner(){}

    public static SingletonInner getSingleton(){
        return Holder.singleton;
    }
}

  

原文地址:https://www.cnblogs.com/jhin-wxy/p/9024059.html