剑指offer 2 单例模式

饿汉式、懒汉式、IoDH式

package CreationalPattern.Singleton;

/**
 * 饿汉式单例模式
 * 优点:在类加载时就已经实例化,无须考虑多线程的问题,调用速度和反应时间优于懒汉式。
 * 缺点:资源利用率不及懒汉式,加载时间可能会比较长。
 *
 * Created by Dennis on 2018/6/14.
 */
public class EagerSingleton {
    private static final EagerSingleton instance = new EagerSingleton();
    private EagerSingleton(){}
    public static EagerSingleton getInstance(){
        return  instance;
    }

    public static void main(String[] args) {
        EagerSingleton s1 = EagerSingleton.getInstance();
        EagerSingleton s2 = EagerSingleton.getInstance();
        System.out.println(s1 == s2);
    }

}
package CreationalPattern.Singleton;

/**
 * 懒汉式单例模式(双重检查锁定机制保证线程安全问题)
 * 优点:实现延迟加载(需要用的时候才加载),资源利用率比饿汉式高。
 * 缺点:通过双重检查锁定机制,系统性能会受到影响。
 *
 * Created by Dennis on 2018/6/14.
 */
public class LazySingleton {

    private volatile static LazySingleton instance = null; //volatile关键字会屏蔽jvm做的一些代码优化,降低性能

    private LazySingleton(){}

    public  static LazySingleton getInstance(){
        //第一重判断
        if(instance == null){
            //锁定代码块
            synchronized (LazySingleton.class){
                //第二重判断
                if(instance == null){
                    instance = new LazySingleton();
                }
            }
        }
        return instance;
    }

    public static void main(String[] args) {
        LazySingleton s1 = LazySingleton.getInstance();
        LazySingleton s2 = LazySingleton.getInstance();
        System.out.println(s1 == s2);
    }
}
package CreationalPattern.Singleton;

/**
 * 静态内部类(IoDH)单例模式(最好实现单例模式的方法)
 * Created by Dennis on 2018/6/14.
 */
public class Singleton {

    private  Singleton(){}

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

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

    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1 == s2);
    }

}

猜你喜欢

转载自blog.csdn.net/dennis_wu_/article/details/80690859