java – Singleton模式面试

前端之家收集整理的这篇文章主要介绍了java – Singleton模式面试前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近我在接受以下代码的采访时询问了 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. More than one instance of Bolton can be created
  2. A Bolton will never be created
  3. The constructor is private and can’t be called
  4. Value can be garbage collected,and the call to getInstance may return garbage data

以下哪个选项是正确的?为什么?

解决方法

这是一个 Singleton Pattern

Singleton Pattern的想法只有一个可用的类的实例.因此,构造函数设置为private,在这种情况下,类维护一个getInstance()方法,该方法既可以调用此类中的现有实例变量INST,也可以为执行程序创建一个新的实例变量INST.答案可能是1,因为它不是线程安全的.对于我早已放下的3号可能会感到困惑,但在设计上,技术上并不是一个缺点.

以下是维基百科的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从内存读取它,而不将其设置在缓存中.

Synchronized statements or methods帮助concurrency.

阅读更多关于double checked locking这是一个“懒惰初始化”单例会发生什么

猜你在找的Java相关文章