单例模式(饿汉式-懒汉式)

我给面试官讲解了单例模式后,他对我竖起了大拇指!https://blog.csdn.net/weixin_41949328/article/details/107296517?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522FAEE9ABD-432D-416C-98C6-9DD939138DEB%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=FAEE9ABD-432D-416C-98C6-9DD939138DEB&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-107296517-null-null.142^v100^pc_search_result_base4&utm_term=%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F&spm=1018.2226.3001.4187

1.单例模式

1.单:一个

2.例:实例,对象

3.目的:为了让一个类只产生一个对象供外界使用

1.1.饿汉式:

java 复制代码
public class Singleton {
    /**
     * 为了不让外界随意new对象
     * 我们需要将构造私有
     */
    private Singleton(){
        
    }
    
    /*
      由于是饿汉式,迫不及待的让这个对象new出来,所以我们new对象的时候,将其变成静态的
      
      而且,单例模式,自己new出来的对象,不能让外界随意直接调用,所以将对象private
     */
    private static Singleton singleton = new Singleton();  
    //   在本类中定义一个方法,将内部的对象给外界
    public static Singleton getSingleton(){
        return singleton;
    }
}

1.2.懒汉式:

java 复制代码
public class Singleton1 {
    /**
     * 为了不让外界随意new对象
     * 我们需要将构造私有
     */
    private Singleton1() {

    }

    /*
      由于是懒汉式,不着急new对象,啥时候想用,啥时候new

      而且,单例模式,自己的对象,不能让外界随意直接调用,所以将对象private
     */
    private static Singleton1 singleton = null;

    /*
       在本类中定义一个方法,将内部的对象给外界
     */
    public static Singleton1 getSingleton() {
        /*
          外层判断,是决定要不要抢锁
         */
        if (singleton==null){
            synchronized (Singleton1.class){
                /*
                  内层判断,是决定要不要new对象
                 */
                if (singleton == null) {
                    singleton = new Singleton1();
                }
            }
        }
        
        return singleton;
    }
}
相关推荐
不是万能的豆学长3 小时前
filetidy 文件整理助手:一键归类 + 规范重命名(Python 零依赖单文件工具)
大数据·开发语言·python·技术美术
时间静止不是简史3 小时前
生产事故排查:Redis 宕机导致补偿队列消费线程死亡,通话录音未上送业务平台
java·redis
2301_32241428046 小时前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
懂点Tech7 小时前
ctfshow MISC入门图片篇(信息附加):misc41解题思路
开发语言·python
金銀銅鐵8 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
catchadmin8 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
福建佰胜张工8 小时前
SMC 薄型气爪 MHF2-16D1 深度解析:平行开闭、低剖面结构在自动化装配中的选型与落地
java·服务器·安全·自动化
念何架构之路9 小时前
go-grpc设计思想
开发语言·后端·golang
catoop9 小时前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现
java·数据库·安全
system_error_x9 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端