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

请你手写一下单例模式代码?

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

参考回答:

懒汉式单例模式:延迟实例化,但节省空间

package com.sxh.singleton;

    public class SingleTon {

    /*
    * volatile关键字确保:当uniqueInstance变量被初始化为SingleTon实例时,多个线程能正确的处理uniqueInstance变量
    * 分析:volatile修饰的成员变量,在每次被线程访问时,都强制性的从共享内存重读该成员的值;
    * 当值发生变化是,强制线程将变化值写入共享内存,任何时候不同线程总是看到你某个成员变量的同一个值
    * */
    private volatile static SingleTon uniqueInstance;//利用一个静态变量来记录SingleTon类的唯一实例
    //其他有用的单件类的数据
    private SingleTon(){} //类外无法访问
    public  static SingleTon getInstance(){

    /*
    * 使用”双重检查加锁“,在getInstance中减少使用同步
    * 首先检查是否实例已经创建了,如果尚未创建,才进行同步;只有第一次访问getInstance会同步
    */

    if(uniqueInstance==null){  //确保只有一个实例
        synchronized (SingleTon.class) { //多线程的情况不会出现问题,线程同步问题
            if(uniqueInstance==null){
             uniqueInstance=new SingleTon();//如果我们不需要这个实例,则永远不会产生
            }
        }
   	 }
   	 return uniqueInstance;
    }
    //其他有用的单件类的方法,单件类也可以是一般的类,具有一般的数据和方法
}

饿汉式单例模式:急切的创建实例,而不用延迟实例化

package com.sxh.singleton;

public class SingleTon {

    private volatile static SingleTon uniqueInstance=new SingleTon();
    //其他有用的单件类的数据
    private SingleTon(){} //类外无法访问
    public  static SingleTon getInstance(){
   		 return uniqueInstance;
    }

	//其他有用的单件类的方法,单件类也可以是一般的类,具有一般的数据和方法
}

IoDH实现单例模式

package com.sxh.singleton;

public class SingleTon {

    private SingleTon(){} //类外无法访问
    private static class HolderClass{ //静态内部类
    	private static final SingleTon uniqueinstance=new SingleTon();
    }

    public  static SingleTon getInstance(){
    	return HolderClass.uniqueinstance;
    }
	//其他有用的单件类的方法,单件类也可以是一般的类,具有一般的数据和方法
}

 

 类似资料:
  • 本文向大家介绍请你手写一下单例模式?相关面试题,主要包含被问及请你手写一下单例模式?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、饿汉模式 这种方式在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快。这种方式基于类加载机制避免了多线程的同步问题,但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化instance显然没有达到懒加载的效果。 2、懒汉模式(

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

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

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

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

  • 本文向大家介绍请你介绍一下策略模式?相关面试题,主要包含被问及请你介绍一下策略模式?时的应答技巧和注意事项,需要的朋友参考一下 考察点:策略模式 策略模式也叫政策模式,是一种行为型设计模式,是一种比较简单的设计模式。策略模式采用了面向对象的继承和多态机制。略模式适合使用在:1.多个类只有在算法或行为上稍有不同的场景。2.算法需要自由切换的场景。3.需要屏蔽算法规则的场景。 使用策略模式当然也有需要