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

请你手写一下单例模式?

丁德义
2023-03-14
本文向大家介绍请你手写一下单例模式?相关面试题,主要包含被问及请你手写一下单例模式?时的应答技巧和注意事项,需要的朋友参考一下

参考回答:

1、饿汉模式

public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton (){
    }
    public static Singleton getInstance() {
   	 	return instance;
    }
}

这种方式在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快。这种方式基于类加载机制避免了多线程的同步问题,但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化instance显然没有达到懒加载的效果。

2、懒汉模式(线程不安全)

public class Singleton {
    private static Singleton instance;
    private Singleton (){
    }
    public static Singleton getInstance() {
        if (instance == null) {
        	instance = new Singleton();
        }
   		return instance;
    }
}

懒汉模式申明了一个静态对象,在用户第一次调用时初始化,虽然节约了资源,但第一次加载时需要实例化,反映稍慢一些,而且在多线程不能正常工作。

3、懒汉模式(线程安全)

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

这种写法能够在多线程中很好的工作,但是每次调用getInstance方法时都需要进行同步,造成不必要的同步开销,而且大部分时候我们是用不到同步的,所以不建议用这种模式。

4、双重检查模式 (DCL)

public class Singleton {
    private volatile static Singleton singleton;
    private Singleton (){
    }
    public static Singleton getInstance() {
        if (instance== null) {
        	synchronized (Singleton.class) {
                if (instance== null) {
                instance= new Singleton();
                }
            }
        }
        return singleton;
    }
}

这种写法在getSingleton方法中对singleton进行了两次判空,第一次是为了不必要的同步,第二次是在singleton等于null的情况下才创建实例。

 

 

 类似资料:
  • 本文向大家介绍请你手写一下单例模式代码?相关面试题,主要包含被问及请你手写一下单例模式代码?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 懒汉式单例模式:延迟实例化,但节省空间 饿汉式单例模式:急切的创建实例,而不用延迟实例化 IoDH实现单例模式  

  • 本文向大家介绍请你来手写一下fork调用示例相关面试题,主要包含被问及请你来手写一下fork调用示例时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、概念: Fork:创建一个和当前进程映像一样的进程可以通过fork( )系统调用: 成功调用fork( )会创建一个新的进程,它几乎与调用fork( )的进程一模一样,这两个进程都会继续运行。在子进程中,成功的fork( )调用会返回0。在

  • 本文向大家介绍请你来手写一下快排的代码相关面试题,主要包含被问及请你来手写一下快排的代码时的应答技巧和注意事项,需要的朋友参考一下 参考回答:  

  • 本文向大家介绍请你介绍一下单例模式?再说一说 懒汉式的单例模式如何实现单例?相关面试题,主要包含被问及请你介绍一下单例模式?再说一说 懒汉式的单例模式如何实现单例?时的应答技巧和注意事项,需要的朋友参考一下 考察点:单例模式 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。优点:单例类只有一个实例、共享资源,全局使用节省创建时间,提高性能。可以用静态内部实现,保证是懒加载就行了,就是使

  • 本文向大家介绍请你说一下如何写测试用例相关面试题,主要包含被问及请你说一下如何写测试用例时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、测试人员尽早介入,彻底理解清楚需求,这个是写好测试用例的基础 2、如果以前有类似的需求,可以参考类似需求的测试用例,然后还需要看类似需求的bug情况 3、清楚输入、输出的各种可能性,以及各种输入的之间的关联关系,理解清楚需求的执行逻辑,通过等价类、边界

  • 本文向大家介绍对于设计模式,你了解哪些?请手写一下观察者模式?相关面试题,主要包含被问及对于设计模式,你了解哪些?请手写一下观察者模式?时的应答技巧和注意事项,需要的朋友参考一下 考察点:观察者模式   观察者模式优点: 观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体观察者列表,每一个具体观察者都符合一个抽象观察者的接口。被观察者并不认识任何一个具体观察者,它