【设计模式】常用单例模式实现

单例模式

什么是单例模式?
首先看看定义:保证一个类只有一个实例,并且提供一个全局的访问点

实现方式:

1.懒汉模式

​ 在需要的时候再创建类的实例化。

class LazySingleton{
    private static LazySingleton instance = null;
    private LazySingleton(){}
    public static LazySingleton getIntance(){
        //双重锁判断
        if(instance == null){
           synchronized (LazySingleton.class){
            if (intance == null){
                intance = new LazySingleton();
            }
          }
        }
        return instance;
    }
}

缺点:线程不安全。为什么这么说呢,因为就好比美国总统选举,一群人进行选举出来了一个总统;但是这时候有一些人不服气,就又进行了一次选举(川普成功竞选);现在就出现了两个总统,必然出现分歧。所以加入判断

instance == null

当进行选举的时候,其他选举活动是无法执行的。但是对于一个程序而言的话,那么效率是非常低下。所以加入双重锁判定的方式。

2.饿汉模式

​ 在类加载阶段就完成了实例的初始化。通过类加载机制,来保证我们的线程安全。

class HungrySingleton{
    private static HungrySingleton instance = new HungrySingleton();
    private HungrySingleton(){}
    public static HungrySingleton getIntance(){
        return instance;
    }
}

3.静态内部类

4.反射模式

5.枚举类型

6.序列化

7.jdk源码

spring如何实现单例

在Spring中,bean可以被定义为两种模式:prototype(多例)和singleton(单例)

singleton(单例):只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实例。

prototype(多例):对这个bean的每次请求都会创建一个新的bean实例,类似于new。

Spring bean 默认是单例模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值