大佬,人人都说精通的单例模式,你精通了吗

简介: 大佬,人人都说精通的单例模式,你精通了吗

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主

📌 擅长领域:全栈工程师、爬虫、ACM算法

💒 公众号:知识浅谈

🔥 联系方式vx:zsqtcc

🤞大佬,人人都说精通的单例模式,你精通了吗🤞

正菜来了⛳⛳⛳

概括起来,要实现一个单例,需要关注的点有下面几个:

  • 构造函数需要是private访问权限的,这样才能避免外部通过new创建实例;
  • 考虑对象创建时的线程安全问题;
  • 考虑是否支持延迟加载:
  • 考虑getlnstance0性能是否高(是否加锁)

🎈饿汉式

类加载时直接实例化单例对象

饿汉式的实现方式比较简单。在类加载的时候,instance静态实例就已经创建并初始化好了,所以,instance实例的创建过程是线程安全的。不过,这样的实现方式不支持延迟加载(在真正用到IdGenerator的时候,再创建实例),从名字中我们也可以看出这一点。

具体的代码实现如下所示:

public class Main { 
    //在类加载的时候就已经实例化好了,不好的地方就是如果用不到就相当于无效占用空间了,但是不会出现多线程的问题
    private static Main test = new Main();
    private Main(){}
    public Main getInstance(){
      return test;
    }
    public static void main(String[] args) {
        System.out.println(Main.test);
    }
}

🎈懒汉式

🍮双重检查模式

之所以双重检查,为了保证多线程创建多个对象形成覆盖的问题。

为什么使用volatile,是因为只有加了volatile,才能保证可见性,在不同的线程中对象的变量值都是可见的。

public class Main {
    private static volatile Main test;
    private Main(){}
    public static Main getInstance(){
        if(test==null){
            synchronized (Main.class){
                if(test==null) test = new Main();
            }
        }
        return test;
    }
    public static void main(String[] args) throws InterruptedException {
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        CountDownLatch count = new CountDownLatch(5);
        for (int i = 0; i < 5; i++) {
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Main.getInstance());
                    count.countDown();
                }
            });
        }
        count.await();
        executorService.shutdown();
    }
}

🍮静态内部类模式

主要用到的原理是 首先静态内部类只有在调用的时候,第一次进行初始化,也就是单例对象只在第一次调用的时候创建。

public class Main {
    private Main(){}
    static class A{
        private static Main test = new Main();
    }
    public static Main getInstance(){
        return A.test;
    }
    public static void main(String[] args) throws InterruptedException {
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        CountDownLatch count = new CountDownLatch(5);
        for (int i = 0; i < 5; i++) {
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Main.getInstance());
                    count.countDown();
                }
            });
        }
        count.await();
        executorService.shutdown();
    }
}

🍚总结

以上就是个人对23种设计模式种的单例模式浅谈,希望有所帮助。

相关文章
|
机器学习/深度学习 算法 搜索推荐
推荐算法介绍
推荐算法介绍
1598 0
|
7月前
|
SQL 关系型数据库 数据库
【数据库】多表关系与多表查询-全维度对比(附《思维导图》)
本文系统讲解多表关系与多表查询,涵盖底层原理、范式设计、JOIN/UNION/子查询语法、CTE递归、性能优化及高频避坑指南,适配MySQL/PostgreSQL,助你从入门直达企业级实战。
|
9月前
|
机器学习/深度学习 自然语言处理 算法
大模型和机器学习
本文系统解析大模型与机器学习的关系,指出大模型是机器学习在“大参数、大数据、大算力”下的进化形态,二者为包含与被包含关系。文章从技术本质、能力特点、应用场景等10个维度对比分析,强调两者非替代而是互补,并展望融合发展趋势。
954 3
|
6月前
|
安全 Linux Shell
Metasploit Pro 5.0.0-2026040201 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 5.0.0-2026040201 (Linux, Windows) - 专业渗透测试框架
295 2
|
8月前
|
数据采集 自然语言处理 搜索推荐
电商行业有哪些agent应用:从 Quick Service 到 Dataphin 的智能革命
本文探讨Agent(智能体)如何驱动电商从“经验驱动”迈向“智能驱动”,聚焦Quick Service(全链路智能客服)、Quick BI“智能小Q”(对话式数据分析)、Data Agent(智能数据管家)与Dataphin(智能数据底座)四大技术实践,重塑运营、决策、履约与服务全链路。(239字)
电商行业有哪些agent应用:从 Quick Service 到 Dataphin 的智能革命
|
7月前
|
人工智能
新手也能上手:AI生成网站从0到上线的完整流程
新手建站常被代码、服务器、域名配置劝退?如今AI建站已大幅简化流程:只需描述需求(如“科技公司产品展示站”),AI即可自动生成首页、产品页等基础结构,再通过拖拽编辑内容、图片,一键发布上线。无需编程,快速打造专业官网。
|
10月前
|
SQL 容灾 Nacos
Seata的部署和集成
本文介绍Seata分布式事务框架的部署与集成。首先下载并解压seata-server-1.5.1,修改application.yml配置,将seataServer.properties配置上传至Nacos作为统一配置中心,并创建所需数据库表。启动tc-server后,注册到Nacos,通过控制台可查看服务状态。各微服务需引入Seata依赖,并在application.yml中配置相关参数。为实现高可用,可搭建多节点TC集群,如GZ和HZ集群,通过Nacos统一管理事务组映射,微服务从Nacos读取client.properties配置,动态切换TC集群连接,提升系统容灾能力。
568 0
|
10月前
|
传感器 人工智能 运维
制造业人工智能技术应用现状全景解析:从车间实操到战略落地的完整指南
凌晨三点,电子厂贴片机突现故障,AI运维系统却早已提前12小时预警。从被动抢修到智能预判,人工智能正重塑制造业:降本增效、预测维护、柔性生产。无论大厂小厂,AI已成生存刚需。实在Agent等轻量工具更让中小工厂轻松迈入智能时代。
1080 0
|
存储 缓存 运维
阿里云经济型e与通用算力型u1实例性能、适用场景及常见问题
在阿里云的众多云服务器实例类型中,经济型e和通用算力型u1实例因其高性价比和广泛的适用性而备受青睐。2024年经济型e实例2核2G3M带宽40G ESSD Entry盘99元1年,通用算力型u1实例2核4G5M带宽80G ESSD Entry盘199元1年,本文将深入解析这两种实例的性能特点、适用场景以及购买建议,以供参考。
阿里云经济型e与通用算力型u1实例性能、适用场景及常见问题
|
机器学习/深度学习 监控 Serverless
无服务器架构(Serverless)
无服务器架构(Serverless)
1165 4