面试题之 【单例模式的几种实现】

62 篇文章 0 订阅
57 篇文章 1 订阅

1 双重加锁

单利模式是设计模式中最基础的设计模式之一,且也是唯一能够使用几十行代码就能够写出来的一种设计模式,所以也是面试中经常问到的题目。
单利模式的实现比较简单,如果想要达到高效且线程安全那也是需要点技巧的。

public class Person {
    private Person(){}
    private static volatile Person person;
    
    public static Person getInstance(){
        if (person==null)
            synchronized (Person.class){
                if (person==null)
                    person=  new Person();
        }
        return person;
    }
}

2 静态对象(饿汉式)

使用静态对象进行单例模式的创建,利用Java中的classLoader的机制,对静态变量只加载一次,且是线程安全的。但是该方法在程序启动时就创建了对象,对空间浪费较大。

public class Person {
    private Person(){}

    //method 1
    private static Person person = new Person();

    public static Person getInstance(){
        return person;
    }
}

3 静态内部类(懒汉式)

对于方法2而言,如果对类进行实例化比较消耗资源,那么饿汉式的方式显然不是最优的,那么此时依旧可以借助Java中的classLoader的机制,使用静态内部类进行优化,当调用了getInstance方法时,静态内部类中的对象才被实例化,这样就实现了懒汉式的加载了。相对于第一种方法,该方法和方法2同样不需要进行加锁,效率相应的提升了。

public class Person {
    private Person(){}

    //method3
    private static class inner{
        private static final Person SINGLETON = new Person();
    }

    public static Person getInstance(){
        return inner.SINGLETON;
    }

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值