首页 > 其他分享 >设计模式之单例模式

设计模式之单例模式

时间:2023-09-20 17:55:26浏览次数:38  
标签:Singleton 模式 instance static 单例 设计模式 public

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。

在Java中,实现单例模式有多种方式,以下是其中两种常见的实现方式:

  1. 饿汉式单例模式(Eager Initialization): 在类加载时就创建实例,并且该实例在整个程序生命周期内都是唯一的。
    public class Singleton {
        private static final Singleton instance = new Singleton();
    
        private Singleton() {
            // 私有化构造方法
        }
    
        public static Singleton getInstance() {
            return instance;
        }
    }
  2. 懒汉式单例模式(Lazy Initialization): 在第一次使用时才创建实例,可以延迟实例的创建时间。
    public class Singleton {
        private static Singleton instance;
    
        private Singleton() {
            // 私有化构造方法
        }
    
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized (Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }

    以上是两种常见的单例模式实现方式,每种方式都有其优缺点,根据具体需求选择合适的实现方式。需要注意的是,单例模式在多线程环境下需要考虑线程安全性,可以使用双重检查锁模式(Double-Checked Locking)。

  3. 双重检查锁模式(Double-Checked Locking Pattern)是一种在多线程环境下延迟初始化对象的单例模式实现方式。它通过在getInstance()方法中使用双重检查锁定来保证只有在实例未被创建时才进行实例化操作。
    public class Singleton {
        private static volatile Singleton instance;
    
        private Singleton() {
            // 私有化构造方法
        }
    
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized (Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }

    双重检查锁模式本质上就是,为了保证可见性和避免指令重排序的问题,将instance声明为volatile类型。这样可以确保在多线程环境下,对instance的读写操作都是按照顺序进行的,避免出现不一致的情况。

标签:Singleton,模式,instance,static,单例,设计模式,public
From: https://www.cnblogs.com/hwj7/p/17717970.html

相关文章

  • FPGA 让LED灯按照指定的亮灭模式亮灭,亮灭模式未知,由用户随机指定
    代码内容如下:modulecounter_led_3(Clk,Reset_n,Ctrl_n,Led);inputClk;inputReset_n;input[7:0]Ctrl_n;outputregLed;reg[26:0]counter;parameterMCNT=100000000;always@(posedgeClkornegedgeRe......
  • Soul CEO张璐创新平台安全治理模式,筑牢用户健康上网的安全防线
    作为备受年轻人喜爱的新型开放式社交平台,SoulApp自成立以来就致力于为用户打造一个真实无压力的社交空间,帮助用户摆脱现实的束缚,在其构建的社交空间里自在互动,尽情真实。为了营造真实、温暖、安全、多元的平台生态,保障用户的安全体验,SoulCEO张璐带领团队,持续升级平台风控......
  • redis三主三从哨兵模式 redis三主三从集群
    转自:https://blog.51cto.com/u_16213559/7033634conf复制/usr/local/src/redis-6.2.6文件夹下redis.conf文件到/usr/local/src/master-slave文件夹中命名为redis6381.conf1#允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不......
  • 【WCH蓝牙系列芯片】-基于CH582开发板—四种低功耗模式电流测试
    ---------------------------------------------------------------------------------------------------------------------在WCH沁恒官方提供的CH583的EVT资源包中,找到BLE文件中找到PW这个工程文件,这是一个系统睡眠模式并唤醒例程;其中GPIOA_5作为唤醒源,共4种功耗等级。芯片提......
  • Java 21 新特性:switch的模式匹配
    在之前的Java17新特性中,我们介绍过关于JEP406:switch的模式匹配,但当时还只是关于此内容的首个预览版本。之后在JDK18、JDK19、JDK20中又都进行了更新和完善。如今,在JDK21中,该特性得到了最终确定!下面,我们就再正式学习一下该功能!在以往的switch语句中,对于case中的类型匹配限......
  • 使用策略模式优化你的代码
    策略模式简介策略模式(StrategyPattern:Defineafamilyofalgorithms,encapsulateeachone,andmaketheminterchangeable.)中文解释为:定义一组算法,然后将这些算法封装起来,以便它们之间可以互换,属于一种对象行为型模式。总的来说策略模式是一种比较简单的模式,听起来可能有点费......
  • K8s部署Nacos 2.0.3集群模式(外置mysql数据库)
    来源:https://www.woniusnail.com/?p=1691Nacos 具体介绍就不介绍了,详细的官方都有。本次主要介绍在k8s集群中部署Nacos集群(3节点),数据库使用外置的mysql,相比使用官方的在k8s内创建数据库的方案维护更方便,所有nacos配置全部保存在数据库中,不用担心重启掉线等异常导致配置文......
  • 8-更大并、可混合接口模式压测的FastHttpUser
    FastHttpUser和HttpUser相比,这个类的运行占用更少压测机的CPU并且可以支撑更大的并发数,并且可以配合gevent类来实现接口混合模式压测(一个user在几乎同一时间并发多个api请求),直接上例子importtimefromgevent.poolimportPoolfromlocustimportFastHttpUser,taskdefa......
  • 11-NO-GUI模式运行测试以及输出测试结果
    CommandLine运行Locust性能测试一、使用headless参数,直接运行测试实际压测场景,使用linux服务器作为压测机一般是没有可视化桌面的,因此需要用到--headless参数来来运行locust测试,如下locust-fyourlocustfile.py--headless在命令行中输入后回车,locust就会自动开始执行yourl......
  • 详解RAID6种磁盘阵列模式
    所谓RAID就是RedundantArrayofIndependentDisk的缩写,中文意思是“独立冗余磁盘阵列”,简单来说就是一种利用多个硬盘来提高系统对磁盘的读写速度及其数据安全系数的一种技术。RAID技术开始一般用于服务器或大型工作站上面,但随着RAID技术的不断成熟,现在不少的家用PC的主板都内置......