面试题解答系列:单例模式:饱汉、饿汉以及延迟加载,双重检查

国内新闻 浏览(863)

单例模式是一种非常基本的设计模式,在访谈中可能需要手写不同类型的单例模式代码。主要有三种模式:

1.饥饿模式:

[java] view plain copy

//饥饿模式,非常饥饿和焦虑,所以在类加载时创建实例对象

公共类Singleton1 {

私有静态Singleton1 singleton=new Singleton1();

私人Singleton1(){

}

公共静态Singleton1 getInstance(){

返回单身人士;

}

}

2,完整模式:

[java] view plain copy

//完全模式,非常繁忙,延迟加载,当你用时间创建实例时,有线程安全问题

公共类Singleton2 {

私有静态Singleton2单例;

私人Singleton2(){

}

公共静态同步Singleton2 getInstance(){

如果(singleton==null)

Singleton=new Singleton2();

返回单身人士;

}

}

3.双锁模式:

[java] view plain copy

//完全模式下的双锁模式,提高效率

公共类Singleton3 {

私有静态Singleton3单例;

私人Singleton3(){

}

公共静态Singleton3 getInstance(){

如果(singleton==null){

同步(Singleton3.class){

如果(singleton==null){

Singleton=new Singleton3();

}

}

}

返回单身人士;

}

}

几种模式的比较:

1.饥饿模式是线程安全的,因为实例对象是在类加载过程中创建的,并且对象引用直接在getInstance()方法中返回。它被称为“饥饿”的原因是因为这个模型创建了一个“紧急”且非常饥饿的实例对象.

优点:简单明了,无需关注线程安全问题。

缺点:如果在大型环境中使用过多的饥饿单例,则无论是否要使用它们,都会产生过多的实例对象。

2,饱腹感模式不是线程安全的,因为实例对象会在需要时生成,在生产之前会判断对象引用是否为空,这里,如果多个线程同时进入判断,则会生成多个实例对象,这不符合单身人士的想法。因此,为了确保线程安全,饱腹感模式使用synchronized关键字来识别方法。它被称为“令人满意”,因为它是完整的,不急于生成示例,只会在需要时生成。

优点:延迟加载,使用时将生成对象。

缺点:需要确保同步,成本效益。

3,双锁模式,是完全模式的优化,双重判断,当实例对象被创建时,不需要锁定,提高效率。这也是一种推荐的方式。

如果有任何问题,我可以私下信任我。还有一些可以通过私信询问的java信息。

喜欢这篇文章,你可以喜欢它。欢迎发表评论,记得关注我,不断更新技术干货,工作场所乐趣,大量采访材料等。

还有一些互联网公司java程序员访谈涉及大部分面试问题和答案,文档和架构视频资料和完整的高清java高级架构学习思维导图免费与大家分享(包括Dubbo,Redis,Netty,zookeeper) ,Spring云,分布式,高并发性和其他架构技术信息),希望在面试前帮助您复习并找到一份好工作,同时也节省您在线搜索信息的时间。

http://www.whgcjx.com/bdsVEXEo/f.html