java – Singleton模式面试
发布时间:2020-12-14 05:33:41 所属栏目:Java 来源:网络整理
导读:最近我在接受以下代码的采访时询问了 java相关的问题,因为我刚刚开始使用 Java,而且在 Java中几乎没有代码,所以我真的不知道下面的代码是什么. 问题是 选择使用以下代码描述最糟糕的选项: public class Bolton { private static Bolton INST = null; public
最近我在接受以下代码的采访时询问了
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() { } } 以下是这个问题的选项
以下哪个选项是正确的?为什么? 解决方法
这是一个
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; } } 将实例变量设置为 Synchronized statements or methods帮助concurrency. 阅读更多关于double checked locking这是一个“懒惰初始化”单例会发生什么 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |