单例之饿汉模式和懒汉模式

饿汉模式

public class Singleton {

/**
* 创建对象
*/
private final static Singleton singleton = new Singleton();

/**
* 私有的构造方法,禁止其他调用
*/
private Singleton(){};

/**
* 对外开放的获取对象的方法
*/
public static Singleton getInstance    (){
return singleton;
}

/**
*优点:这种写法比较简单,就是在类装载的时候就完成实例化。避免了线程同步问题。
*缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费。
*/
}

懒汉模式

package com.wanshi.Danli;

public class Singleton2 {

    private static volatile Singleton2 singleton2;

    private Singleton2() {}

    public static Singleton2 getInstance() {
        if (singleton2 == null) {
            synchronized (Singleton2.class) {
                if (singleton2 == null) {
                    singleton2 = new Singleton2();
                }
            }
        }
        return singleton2;
        /**
         *     Double-Check概念对于多线程开发者来说不会陌生,如代码中所示,
         *     我们进行了两次if (singleton == null)检查,这样就可以保证线程安全了。
         *     这样,实例化代码只用执行一次,后面再次访问时,判断if (singleton == null),直接return实例化对象。
         *    优点:线程安全;延迟加载;效率较高。
         */
    }
}  

猜你喜欢

转载自www.cnblogs.com/miaozk/p/9576859.html