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

news/2024/12/12 4:09:44/

一.啥是单例模式?

先介绍一下设计模式:  

设计模式好⽐象棋中的 "棋谱". 红⽅当头炮, ⿊⽅⻢来跳. 针对红⽅的⼀些⾛法, ⿊⽅应招的时候有⼀些固定的套路. 按照套路来⾛局势就不会吃亏.
软件开发中也有很多常⻅的 "问题场景". 针对这些问题场景, ⼤佬们总结出了⼀些固定的套路. 按照这个套路来实现代码, 也不会吃亏.

单例模式能保证某个类在程序中只存在唯⼀⼀份实例, ⽽不会创建出多个实例. 

  

这种情况就存在了两份实例 

单例模式具体的实现⽅式有很多. 最常⻅的是 "饿汉" 和 "懒汉" 两种 

二.饿汉模式 

实现步骤:

1.要实现单例模式,只需要定义一个静态全局变量,这样就可以保证变量全局唯一。

private static Singleton instance= new Singleton();

 private:保证这个变量不可修改。

static:保证全局唯一

2.构造方法私有化

private Singleton() {}

 这样就保证了外界无法通过构造方法创建对象

3.将获取instance的方法用static修饰,使其可以通过类.方法名调用。

public static Singleton getInstance() {return instance;}
public class Singleton {private static Singleton instance= new Singleton();//构造方法私有化private Singleton() {}public static Singleton getInstance() {return instance;}
}

 这种在类加载时就完成初始化对象的模式称为“饿汉模式”。

三.懒汉模式

1.只声明全局变量,不初始化

​​​​​​​private static Singleton_02 instance = null;

2.获取instance时进行if判断,为null再初始化

public static Singleton_02 getInstance() {if(instance == null) {instance = new Singleton_02();}return instance;}

private static Singleton_02 instance = null;private Singleton_02() {}public static Singleton_02 getInstance() {if(instance == null) {instance = new Singleton_02();}return instance;}

这样创建在单线程运行没问题

但在多线程模式下:

这里暂停1s是为了让线程全部进入if语句 

可能会出现问题

因此,要解决这个线程问题,使用新学的synchronized,volatile关键字

private static volatile Singleton_02 instance = null;private Singleton_02() {}public static Singleton_02 getInstance() {if(instance == null) {synchronized(Singleton_02.class) {if(instance == null) {instance = new Singleton_02();}}}return instance;}


http://www.ppmy.cn/news/1554394.html

相关文章

高效整合聚水潭库存数据至MySQL的实现

聚水潭数据集成到MySQL:商品库存查询案例分享 在本次技术案例中,我们将详细探讨如何通过轻易云数据集成平台,将聚水潭的商品库存数据高效、可靠地集成到MySQL数据库中。具体方案为“聚水潭-商品库存查询-->BI彩度-商品库存表”&#xff0…

HarmonyOS-中级(四)

文章目录 Native适配开发三方库的基本使用 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年12月09日11点12分 Native适配开发 Node-API HarmonyOS Node-API 是 HarmonyOS 提供的…

使用 Temporal 管理和调度 Couchbase SQL 脚本的实际例子

场景描述 目标:使用 Temporal 管理和调度一组 Couchbase SQL 脚本来完成以下任务: 同步数据:从其他数据源同步数据到 Couchbase。 执行数据聚合:运行统计 SQL 查询。 清理过期数据:定期清理 Couchbase 中过期或无效…

如何在 cPanel 中创建子域名:分步指南

cPanel 是一个用于管理网站的工具,操作界面简单直观,常用于管理网站的各种功能,包括创建子域名。很多知名的网络服务提供商,如 Hostease,都提供了 cPanel 管理工具。 本文将详细介绍如何在 cPanel 中创建子域名&#x…

如何将CSDN的文章保存为PDF?

目录 1、打开CSDN文章2、按F12或者鼠标右键选择检查并进入控制台3、在控制台输入以下代码4、然后回车(Enter)如果纵向显示不全就横向 1、打开CSDN文章 2、按F12或者鼠标右键选择检查并进入控制台 3、在控制台输入以下代码 (function(){ $("#side&q…

鸿蒙面试---1208

HarmonyOS 三大技术理念 分布式架构:HarmonyOS 的分布式架构使得设备之间能够无缝协同工作。例如,它允许用户在不同的智能设备(如手机、平板、智能手表等)之间共享数据和功能。比如,用户可以在手机上开始编辑文档&…

如何解决压测过程中JMeter堆内存溢出问题

如何解决压测过程中JMeter堆内存溢出问题 背景一、为什么会堆内存溢出?二、解决堆内存溢出措施三、堆内存参数应该怎么调整?四、堆内存大小配置建议 背景 Windows环境下使用JMeter压测运行一段时间后,JMeter日志窗口报错“java.lang.OutOfMe…

优化移动端H5:常见问题与解决方案

移动端H5开发中的“坑”与解决方案 本文介绍了开发中遇到的几个关于移动端H5开发中的小问题,以及解决的方法。 一、iOS滑动不流畅问题 在iOS设备上,H5页面的滑动效果有时会出现不流畅的情况,特别是在页面高度超过一屏时。这通常是由于iOS的…