Java23种设计模式——单例模式

该系列文章为博主学习笔记,原文请参考参考链接
本文禁止转载,但是欢迎大家留言区留言交流[微笑]

理(面)解(试)单例模式:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

饿汉式:

//饿汉式
//类被加载时就将自己实例化,它的优点在于无须考虑多线程访问问题,可以确
//保实例的唯一性
//从调用速度和反应时间角度来讲,由于单例对象一开始就得以创建,因此要优
//于懒汉式单例
//由于在类加载时该对象就需要创建,因此从资源利用效率角度来讲,饿汉式单
//例不及懒汉式单例
public class EagerSingleton {
    private static final EagerSingleton eagerSingleton=new EagerSingleton();
    private EagerSingleton(){}

    public static EagerSingleton getEagerSingleton() {
        return eagerSingleton;
    }
}

这里写图片描述

懒汉式:

//懒汉式
//在第一次使用时创建,无须一直占用系统资源
public class LazySingleton {
    private volatile static  LazySingleton lazySingleton = null;

    private LazySingleton(){}

    public static LazySingleton getLazySingleton() {
        if (lazySingleton == null) {
            synchronized (LazySingleton.class) {
                if (lazySingleton == null) {
                    lazySingleton = new LazySingleton();
                }
            }
        }
        return lazySingleton;
    }
}

这里写图片描述

这里面一定要加上volatile这个关键字,该关键字的思想是happen-before规则

loDH:

//IoDH
//结合了懒汉式和饿汉式的优点
public class Singleton {
    private Singleton(){}

    private static class HolderClass{
        private static final Singleton singleton=new Singleton();
    }

    public static Singleton getSingleton() {
        return HolderClass.singleton;
    }
}

微信公众号:
这里写图片描述

QQ群:365473065

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值