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

本文主要是本人对单例模式中饿汉式和懒汉式的一些理解;


首先我们了解单例模式。


何为单例模式,本人认为,只有不大于1个的实例对象可以被调用,那么就可以被称之为单例模式。


那么,饿汉式和懒汉式又是什么呢?


下面本人用实例展示自己对这两者的理解;


懒汉式:


懒汉,从名字上来看就知道,懒么,到了要用到的时候再去;


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



饿汉式:


饿汉式相对于懒汉式来说,就勤快了,不需要等到需要的时候催着去做,自己在一开始就做好准备了;


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


测试类:


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



我们来看打印结果:


懒汉式:


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

饿汉式:


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


结果:


可以看到,饿汉式在没有调用时已经进行了实例化,而懒汉式在判断为空时才进行实例化。


总结:


本人在学习这个知识的时候有位大牛说了一句很厉害的话:饿汉式是“用空间换时间”,懒汉是“用时间换空间”;

怎么个意思呢?饿汉式在启动时已经实例化对象,一直等待被调用,那么这个对象就一直在内存中,在调用时可以直接调用;懒汉式只有等到被调用时才去判断是否为空从而判断是否进行实例化对象的操作,那么在这之前内存中并不存在此实例对象,判断时就影响到了程序的运行速度;

懒汉和饿汉的问题在于,饿汉式一直占用着内存;懒汉式在高并发的状态下不安全,容易出现问题,可以尝试使用同步限制解决。


分享使人进步。