单例模式-多线程第二阶段课程

2020-10-03  本文已影响0人  jiahzhon
public class Singleton1 {
    private static Singleton1 instance;
    
    private Singleton1() {
        
    }
    
    public synchronized static Singleton1 getInstance(){
        
        if (null == instance)
            instance = new Singleton1();
        
        return Singleton1.instance;
    }
}
public class Singleton2 {

    private static Singleton2 instance;

    private Singleton2(){
        //假设此时构造函数加载了很多东西,花费时间很长。
    }

    //double check
    public  static Singleton2 getInstance(){

        if(null == instance){
            synchronized (Singleton2.class) {
                if (null == instance)
                    instance = new Singleton2();
            }
        }
        
        return Singleton2.getInstance();
    }
}

三种比较优雅的实现方式

public class Singleton3 {
    
    private Singleton3() {
        
    }
    
    private static class InstanceHolder {
        private final static Singleton3 instance = new Singleton3();
    }
    
    public static Singleton3 getInstance(){
        return InstanceHolder.instance;
    }
}
public class Singleton4 {
    
    private Singleton4(){
        
    }
    
    private enum Singleton {
        INSTANCE;
        
        private final Singleton4 instance;
        
        Singleton() {
            instance = new Singleton4();
        }
        
        public Singleton4 getInstance() {
            return instance;
        }
    }
    
    public static Singleton4 getInstance() {
        return Singleton.INSTANCE.getInstance();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读