当前位置: 首页 > 面试题库 >

单例模式面试

凌恩
2023-03-14
问题内容

最近,在接受以下代码的采访时,有人问我有关Java的问题,因为我是Java的新手,几乎没有Java代码,所以我真的不知道下面的代码做什么。

问题是使用以下代码选择描述最糟糕情况的选项:

public class Bolton {
    private static Bolton INST = null;

    public static Bolton getInstance()
    {
        if ( INST == null )
        {
            INST = new Bolton();
        }
        return INST;
    }

    private Bolton() {
    }
}

这是此问题的选项

  1. 可以创建多个Bolton实例
  2. 博尔顿将永远不会被创造
  3. 构造函数是私有的,不能调用
  4. 可以对值进行垃圾收集,并且对getInstance的调用可能返回垃圾数据

以上哪个选项是正确的?又为什么呢?


问题答案:

这是一个单例模式

单例模式的想法是只有一个可用的类实例。因此,在这种情况下,constructor设置为private,并且该类维护一种getInstance()方法,该方法可以在此类中调用现有的实例变量INST,或者为执行的程序创建一个新的实例变量。答案可能是1,因为它不是线程安全的。对于我早些时候提到的3,可能会感到困惑,但这在技术上是设计使然,因此实际上不是缺陷。

这是Wikipedia中的 Lazy Initialization (线程安全的单例模式)示例:

public class SingletonDemo {

    private static volatile SingletonDemo instance = null;

    private SingletonDemo() {  }

    public static SingletonDemo getInstance() {
        if (instance == null) {
            synchronized (SingletonDemo.class){
                if (instance == null) {
                    instance = new SingletonDemo();
                }
            }
        }
        return instance;
    }

}

设置实例变量可以volatile告诉Java从内存中读取它,而不是将其设置在缓存中。

同步的语句或方法有助于并发

阅读有关双重检查锁定的更多信息,这对于“延迟初始化”单例会发生什么



 类似资料:
  • 问题内容: 就像我之前的问题一样,该问题引用了 Effective Java 。这次,我有很多子问题。 特权客户端可以借助该方法以反射方式调用私有构造函数。如果需要对此进行防御,请修改构造函数。 究竟如何调用私有构造函数?那是什么? 您的专家对单身人士采取什么方法? 如果我们每次都要检查新实例还是每次都检查同一个实例,第二种方法难道不是更灵活吗? 如果我尝试克隆类/对象怎么办? 单元素枚举类型是实

  • 主要内容:介绍,实现,SingleObject.java,SingletonPatternDemo.java,单例模式的几种实现方式,实例,实例,实例,实例,实例,实例单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只

  • 亦称:单件模式、Singleton 意图 单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。 问题 单例模式同时解决了两个问题, 所以违反了单一职责原则: 1、保证一个类只有一个实例。 为什么会有人想要控制一个类所拥有的实例数量? 最常见的原因是控制某些共享资源 (例如数据库或文件) 的访问权限。 它的运作方式是这样的: 如果你创建了一个对象, 同时

  • 一、定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 当单击登陆按钮,页面中出现一个登陆浮窗,这个登陆浮窗是唯一的,无论单击多少次登陆按钮,这个浮窗都只会被创建一次,那么这个登陆浮窗就适合用单例模式来创建。 二、实现原理 要实现单例并不复杂,使用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象。 三、假单例 全局变量不是单例模式,

  • 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppCon

  • 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必