Java的懒汉与饿汉模式怎么实现

发布时间:2022-02-09 16:51:53 作者:iii
来源:亿速云 阅读:197

今天小编给大家分享一下Java的懒汉与饿汉模式怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

首先,我们先了解下单例模式的定义:单例设计模式目的是使得类的一个对象成为系统中的唯一实例。

再看下,Java 中单例模式的定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供。

那么,所谓“懒汉式”与“饿汉式”的区别,是在于建立单例对象的时间不同。

“懒汉式”:是在你真正用到的时候才去建这个单例对象;

“饿汉式”:在不管你用的用不上,一开始就建立这个单例对象。

一、饿汉式

饿汉式:通俗的来讲,这位打工人对干饭特积极,不管饿不饿都跟饿死鬼似的,老早的就把干饭工具准备好了( new 对象),随时准备干饭。

上代码:

class Hungry_people{

    private int id;

    private String name;

    private Hungry_people(){

    }        //构造器私有化

    private static Hungry_people Instance=new Hungry_people();  

    //内部创建类的对象

    public static Hungry_people getInstance(){

        return Instance;

    }

    //提供公共的静态方法,且返回对象。

}

public class Test1 {

    public static void main(String[] args) {

        Hungry_people hungry1 = Hungry_people.getInstance();

        Hungry_people hungry2 = Hungry_people.getInstance();

    }

}

二、懒汉式

懒汉式:通俗的讲,这位打工人对干饭一点都不上心,碗筷脏了也不理,啥时候要干饭了才来洗碗筷( new 对象)。

上代码:

class Lazy_people {

    private Lazy_people(){

    }

    private static Lazy_people Instance = null;

    //声明当前对象没有初始化值

    public static Lazy_people getInstance(){

        if (Instance == null){

            Instance=new Lazy_people ();

            //需要再造对象,不要就不new对象了

        }

        return Instance;

    }

}

public class Test2 {

    public static void main(String[] args) {

       Lazy_people lazy1 = Lazy_people.getInstance();

    }

}

三、饿汉和懒汉有啥不同

对于饿汉式:

优点:线程贼安全

缺点:对象加载时间过长

对于懒汉式:

优点:延迟对象的创建,更快

缺点:多线程安全贼低,但是可以通过优化使其可用。

四、常见面试题

1.懒汉式和饿汉式有什么不同?

答:懒汉式的特点在于实例的延迟加载。

2.懒汉式的延迟加载有没有问题?

答:遇到多线程访问时会出现安全问题。

3.如何解决该问题?

答:可以增加同步来解决。

4.增加同步的方式?

答:用同步方法或同步代码块都可以,但是同步方法稍微有点低效。

5.增加同步时,使用的锁是哪一个?

答:该类所属的字节码文件对象。

以上就是“Java的懒汉与饿汉模式怎么实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

推荐阅读:
  1. jquery插件如何实现懒汉式加载图片
  2. 单例设计模式(懒汉模式、饿汉模式)C++

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:win7中输入法图标不见了怎么办

下一篇:JavaScript跨域问题怎么解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》