java懒汉和饿汉模式的区别

美女程序员鼓励师

区别

1、懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。

2、饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了

线程安全:

饿汉式天生线程安全,可直接用于多线程,无任何问题,

懒汉风格本身是非线程安全的(双检锁解决并发问题)

资源加载和性能:

饿汉式在类创建的同时实例化一个静态对象出来,无论以后是否使用该单例,都会占用一定的内存,但相应地,由于其资源已初始化,第一次调用的速度也会更快。

懒汉式,会延迟加载,在第一次使用本单例时才会出现实例对象,第一次调用时要做初始化,如果要做的工作比较多,性能会有些延迟,以后就像饿汉式一样。

2、实例

public class SingleTon01 {

    public static void main(String[] args) {

        GirlFriend gf1 = GirlFriend.getGf();

        GirlFriend gf2 = GirlFriend.getGf();

        //true

        System.out.println(gf1 == gf2);

 

        Cat cat1 = Cat.getCat();

        Cat cat2 = Cat.getCat();

        //true

        System.out.println(cat1 == cat2);

    }

}

 

 

/**

 * 单例模式-饿汉模式

 * 在类加载的时候就会创建对象

 */

class GirlFriend {

    public String name;

 

    private static GirlFriend gf = new GirlFriend("小红");

 

    public static GirlFriend getGf() {

        return gf;

    }

 

    /**

     * 构造器私有化,不能在本类之外new

     * @param name

     */

    private GirlFriend(String name) {

        this.name = name;

    }

 

    @Override

    public String toString() {

        return "GirlFriend{" +

                "name='" + name + '\'' +

                '}';

    }

}

 

/**

 * 单例模式-懒汉模式

 * 1.构造器私有化

 * 2.提供一个static静态属性对象

 * 3.提供一个public的static方法,返回一个实例对象

 * 4.懒汉模式,只有在用户调用方法时,才会创建对象,之后再次调用,返回的是同一对象

 */

class Cat {

    private String name;

 

    private static Cat cat;

 

    private Cat(String name) {

        this.name = name;

    }

 

    public static Cat getCat() {

        if (cat == null) {

            cat = new Cat("加菲猫");

        }

        return cat;

    }

 

    @Override

    public String toString() {

        return "Cat{" +

                "name='" + name + '\'' +

                '}';

    }

}

以上就是java懒汉和饿汉模式的区别,希望对大家有所帮助。更多Java学习指路:Java基础

本教程操作环境:windows7系统、java10版,DELL G3电脑。

以上是 java懒汉和饿汉模式的区别 的全部内容, 来源链接: utcz.com/z/544564.html

回到顶部