理解单例模式

SQLite性能优化:从WAL模式到内存映射的深度解析 本文深入解析SQLite性能优化策略,重点介绍WAL模式和内存映射技术的应用。通过合理配置WAL日志、同步策略和事务批处理,SQLite的IO吞吐量可提升3-5倍。结合内存映射和缓存优化,性能可进一步提升至默认配置的50倍,适用于高并发读写场景。 阅读详情

理解单例模式
首先我们来对单例模式的概念了解一下。
单例模式:对象单例设计,就是设计类时保证类的实例在内存中只有一份。

实现方式有:
1)内部设计实现(对类自身进行设计)
2)外部设计实现(对类的对象提供一种池)

那么我们 要思考的是:如何保证类的设计在内存中只有一份类的实例?
下面我们介绍几种模式:
一:懒汉模式
懒汉模式-1:
缺陷:线程不安全的单例设计(适用单线程)
``java`
class Singleton01{
//构造方法私有化,不允许外界直接构建对象

private Singleton01() {
	System.out.println("Singleton01()");
}
private static Singleton01 instance;
public  static Singleton01 getInstance() {
	if(instance == null) {
		instance = new Singleton01();
	}
	return instance;

}

}
此类的设计存在线程不安全?
思考:导致线程不安全的原因:
1):多个线程并发执行
2):多个线程有共享数据集
3):多个线程在共享数据集上的操作是非原子(不可再分对象)操作。
原子操作:必须是一个线程执行完了一个操作,其它线程才能执行操作


懒汉模式-2:
优点:线程安全
缺陷:低效率 (synchronized:要让多个线程在这个代码块上顺序执行)

class Singleton02{
	//构造方法私有化,不允许外界直接构建对象
	private Singleton02() {
		System.out.println("Singleton02()");
	}
	private static Singleton02 instance;
	//保证线程安全可以加锁synchronized,但是加锁后会按顺序执行,效率降低
	//synchronized:保证代码的原子性(不能同时又多个线程对这个代码块进行访问)
	//synchronized:要让多个线程在这个代码块上顺序执行
	//此设计虽然保证了安全 ,但是性能会被降低
	public  synchronized static  Singleton02 getInstance() {
		if(instance == null) {
			instance = new Singleton02();
		}
		return instance;
	}
}

二:饿汉模式
优点:线程安全且高效无阻塞的单例设计
适用:适用小对象,频繁使用
此单例的缺陷:隐式加载都会执行类的初始化,会先初始化类变量(1次)后续多线程访问的时候已经有值了。
可能会对资源占用较多,尤其是对大对象(长时间不用的对象),造成内存占用浪费。

class Singleton05{
	//大对象(长时间不用)
	//int[] array= new int[2048];
	//构造方法私有化,不允许外界直接构建对象
	private Singleton05() {
		System.out.println("Singleton05()");
	}

	//类加载的时候构建类的实例,类变量初始化一次
	private  static Singleton05 instance = new Singleton05();

	public  static  Singleton05 getInstance() {
		return instance;
	}
	public static void show() {

	}
}

三:静态内部类
优点:线程安全且高效无阻塞的单例设计
适用:适用,大对象,频繁用(多线程高并发,大量访问 )

class Singleton06{
	int[] array= new int[2048];
	//构造方法私有化,不允许外界直接构建对象
	private Singleton06() {
		System.out.println("Singleton06()");
	}
	//通过内部类实现属性的延迟初始化(懒加载/延迟加载)
	static class inner{
		private  static Singleton06 instance = new Singleton06();
	}

	public  static  Singleton06 getInstance() {
		return inner.instance;
	}
	//public static void show() {}  访问show方法是内部类不会被加载

}

四:双重校验锁
优点:线程安全且高效有阻塞或少阻塞的单例设计
适用:大对象,稀少用(并发小,并发访问少 )

class Singleton04{
	//构造方法私有化,不允许外界直接构建对象
	private Singleton04() {
		System.out.println("Singleton04()");
	}
	
	//记住:当多个线程对一个共享变量进行操作时,使用volatile关键字
	private static volatile Singleton04 instance;

	public  static  Singleton04 getInstance() {
		//静态方法的锁,默认是类名.class.字节码对象
		//实例方法的锁,默认是this(关键字)
		if(instance==null) {
			synchronized(Singleton04.class) {
				if(instance == null) {
					instance = new Singleton04();
				}
			}
		}
		return instance;
	}
}

volatile关键字(修饰类中属性)的作用:
1)保证线程的可见性
分析:操作系统给JVM开辟内存空间,运行程序可能是多个CPU,CPU执行程序要把代码读到CPU
CPU中有cache(高速缓冲存储器),CPU执行计算会做以下内容:
①会把主内存(操作系统给JVM开辟内存空间)的数据读到CPU内部的cache中
②操作系统和硬件进行调度的时候,需要 总线 来传递数据到CPU
CPU要读取内存空间的数据,是通过一个线程thread来读的 总线(bus)
总线(bus):计算机各种功能部件之间传递信息的公共通信干线。

保证线程的可见性:
一旦有一个线程修改了变量的取值,还会把这个值写回到主内存,一旦写回到主内存,如果这个
变量使用volatile关键字修饰,会立刻向总线发一个消息,这个消息就是通知其它线程我这个
变量的值已经改变了,其它线程不要修改值往主内存写了。然后这个CPU会立刻设置为这个线程
中的cache中的数据失效,它再想修改就要从主内存中重新去读取。
操作系统立刻通知总线(bus)其它线程这个变量值已经发生改变,你给原先CPU的值已经失效了。(底层做的事)

2)禁止指令重排序:
如instance = new Singleton04();会有如下过程
内存分配空间–>属性初始化–>调用构造方法–>为instance 赋值
可能存在内存分配空间后,有内存地址,直接为instance 赋值内存地址
这就没有按照顺序执行,加volatile关键字禁止指令重排序,按顺序执行
3)但不保证其原子性


华为防火墙双线路配置实战:5分钟搞定主备自动切换(含健康检查避坑指南) 本文详细介绍了华为防火墙双线路配置实战,包括主备自动切换和健康检查机制的优化技巧。通过智能健康检查机制,华为防火墙能实现毫秒级故障自动切换,确保网络高可用性。文章提供了从架构设计到实战配置的全流程指南,并分享了常见配置误区与解决方案,帮助中小企业快速搭建稳定可靠的网络架构。 阅读详情

相关推荐

深入解析Sigma Delta调制器 —— 从电流采样到数字信号处理的完整链路

本文深入解析了Sigma Delta调制器的工作原理与应用。通过剖析过采样、噪声整形与负反馈核心机制,并结合AMC1306等实例,详细阐述了从电流采样到数字信号处理的完整链路。该技术凭借其高精度和高抗干扰能力,在ADC、电流测量及音频处理等领域发挥着关键作用。

ttt77的博客 643

单例模式详解

一、什么是单例模式 单例模式是Java中最简单的设计模式之一。这种类型的设计模式属于创建者模式,它提供了一种访问对象的最佳方式。 这种设计模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一对象的方式,可以直接访问,不需要实例化该类的对象。 二、单例模式的结构 单例类:只能创建一个实例的类 访问类:使用单例类的类 三、单例模式分类 饿汉式:类加载就会导致该单实例对象被创建 懒汉式:类加载不会导致该单实例对象被创...

欢迎一起学习交流 2万+

5分钟搞定:用Ollama在MacBook上本地运行Qwen3大模型(附避坑指南)

本文详细介绍了如何在MacBook上使用Ollama快速部署和运行Qwen3大模型,包括安装步骤、性能优化技巧及常见问题解决方案。Ollama作为一款轻量级工具,特别适合M系列芯片的Mac用户,支持多种量化版本,显著降低资源消耗,提升推理速度。

sql99的博客 822

设计模式-单例模式

什么是单例模式 保证整个系统中一个类只有一个对象的实例,实现这种功能的方式就叫单例模式。 有什么特点: 在Java应用中,单例模式能保证在一个JVM中,该对象只有一个实例存在 构造器必须是私有的,外部类无法通过调用构造器方法创建该实例 没有公开的set方法,外部类无法调用set方法创建该实例 提供一个公开的get方法获取唯一的这个实例 有什么好处 某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销 省去了new操作符,降低了系统内存的使用频率,减轻 GC 压力 避免了对资源的重复占用 接

养歌的博客 139

统计信号处理基础 习题解答1-1

1-1:在雷达习题中,双程延时时间的估计量具有PDF τ0~Nτ0,στ02,其中τ0是真值。假如要估计距离请提出一种估计量R,并求它的PDF。然后,确定标准偏差στ0,使得距离估计值的99%在真值的100m以内,对电磁波传播速度取c=3×108m/s。 解答: 问题1: 由于电磁波传播速度c,信号可观察的双程传播延时τ0和双程传播距离τ0满足关系: R=cτ02 因此可采用如下估计量: R=cτ02 问题2: 由于τ0满足正态分布,且: Eτ0=τ0 varτ0=στ02 那么: E

weixin_43270276的博客 2806

PCL 欧式聚类(C++详细过程版)

为充分了解算法实现的每一个细节和有待改进的地方,使用C++代码对算法实现过程进行复现。

点云侠的博客 2448

设计模式——1、单例模式

在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。 单例模式的定义与特点 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。 在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程

pshdhx的博客 6258

1、微软 Intune 全面指南:配置、管理与自动化

本文全面介绍了微软 Intune 的配置、管理和自动化操作,涵盖用户与设备管理、安全策略设置、跨平台应用部署、合规性监控及报告分析等内容。通过详细的操作步骤、自动化脚本示例和流程优化建议,帮助技术人员高效掌握 Intune 在混合办公环境中的实际应用,并展望其未来发展趋势。

ii567的博客 361

设计模式(1)——单例模式

单例模式是一种确保类仅有一个实例的设计模式。本文介绍了四种实现方式:1)饿汉式(类加载时创建实例,线程安全但可能浪费内存);2)懒汉式(使用时创建实例,需双重检查保证线程安全);3)静态内部类(利用JVM类加载机制实现延迟加载和线程安全);4)枚举类(最简单安全的实现方式)。每种方式都通过代码示例演示,并验证了线程安全性。其中枚举方式最为简洁,推荐使用。这些实现方法各有特点,可根据具体场景选择适合的方式。

m0_70325779的博客 855

CPU、Core、RISC、ARM等的前世今生

CPU、Core、RISC-V 、ARM、ASIC、FPGA、SOC概念及区分

nxin168的博客 1017

AUTOSAR TcpIp模块 以太网配置开发2

someip协议之tcpIp协议

汽车电子电气 1085

单例模式

一、单例模式的定义 定义: 确保一个类只有一个实例,并提供该实例的全局访问点。 这样做的好处是:有些实例,全局只需要一个就够了,使用单例模式就可以避免一个全局使用的类,频繁的创建与销毁,耗费系统资源。 二、单例模式的设计要素 一个私有构造函数 (确保只能单例类自己创建实例) 一个私有静态变量 (确保只有一个实例) 一个公有静态函数 (给使用者提供调用方法) 简单来说就是,单例类的构造方法不让其他人修改和使用;并且单例类自己只创建一个实例,这个实例,其他人也无法修改和直接使用;然后单例类提供一个调用方法,想用

林啾啾的博客 324

当SLAM遇上FPGA:打造一个会“硬件加速”的激光雷达SLAM系统

点云数据的运动畸变校正特征点提取与匹配、以及ICP迭代最近点配准。在传统方案中,我们通常用ARM核完成所有计算。但点云配准中的最近邻搜索(KD-Tree)需要大量分支判断,CPU处理起来效率很低;而ICP中的矩阵分解(SVD)虽然计算量大,但非常适合并行化。ZYNQ的特殊之处在于它把ARM(PS端)和FPGA(PL端)集成在同一颗芯片上。ARM擅长跑操作系统、处理复杂逻辑和调度,FPGA擅长做高吞吐量的并行计算。两者之间通过AXI总线高速互联,数据交换延迟只有几十个时钟周期。

QQ_778132974的博客 375

单例模式理解

单例模式: 简单来说就是一个类只能构建一个对象的一种设计模式 1、饿汉模式 class Singleton { private static Singleton instance = new Singleton(); private Singleton() {}//私有的构造函数 public static Singleton getInstance() { return instance; } } 2、懒汉模式 class Singleton { private static Single

qq_44723296的博客 233

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

单例模式的理解

什么是单例模式 只能被创建一次对象 实现单例模式的方式(三种) 饿汉式 懒汉式 静态代码块 饿汉式的理解与步骤 首先因为是单例模式,首先1.把构造器私有化,堵住new 类()的方法,都不能通过new来创建对象,2.因为饿汉式体现了着急的特点,所有设置一开始的时候就创建对象,且只创建一次,3.然后提供一个公共方法去获取早已经创建好的对象。 饿汉式 顾名思义 (饿的不行迫不及待想要吃东西)所有一开始就准备好东西(对象),想吃的时候直接吃(取对象)。 饿汉式的优点 :线程十分安全; 缺点:一开始就创建对象,

cool_xi的博客 189

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

用最简单的例子理解单例模式(Singleton Pattern)

当从应用程序全局的角度来看,如果只允许类的一个实例产生,就可以考虑单例模式。 □ 即时加载的单例模式 把类的实例赋值给类的一个静态字段。 class Program { static void Main(string[] args) { Logger log = Logger.GetInstance(); ...

weixin_30570101的博客 91

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深入单例模式 java,深入理解 JavaScript 单例模式 (Singleton Pattern)

概念单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。核心:确保只有一个实例,并提供全局访问。实现思路一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常命名为getIntance);当我们调用这个方法时,类持有的引用不为空则返回这个引用,如果为空须创建该类实例并将实例的引用赋予该类保持的引用;同时将该类的构造...

weixin_35952427的博客 188

【面试常问】说一下你对单例模式的理解

设计模式在开发中是重中之重,尤其是单例模式,因此也就成了面试中的高频问题,决定整理一下;如有错误还请个位指正!

Willing卡卡的博客 1183

深入理解单例模式

深入解析常用单例模式 1:首先了解单例模式遵循的规则 (1):构造器私有化 (2):以静态方法或者枚举类型返回实例 (3):确保尤其在多线程中实例只有一个 (4):确保反序列化时候不会重新创建对象 2:常见单例模式: (1):饿汉式 (2):懒汉式 (3):双锁懒汉模式 (4):静态内部类模式 (5):枚举模...

qq_44808582的博客 164

简单理解设计模式之单例模式

1.什么是单例模式?我们为什么要用单例模式? 首先我们要知道我们为什么要用单例模式,其实在很多的时候我们都用到了单例模式,这也是很经常要用到的,比如一个对象我们只需要它实例化一次,不允许它任意的创建。其实这就是单例模式,就是我们要一个对象只实例化一次,比如数据库的连接。。 2.单例模式有哪些? 单例模式分为两种:一种是懒汉模式,另一种是饿汉模式。 3.怎么创建懒汉模式的单例模式 步骤如下

YQYnsmile的博客 2189

php单例模式的理解和实现,php数据库单例模式理解

单例模式(职责模式):简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务;单例类:1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;2、拥有一个保存类的实例的静态成员变量3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过insta...

weixin_36245388的博客 356

深入理解设计模式中的单例模式(Singleton Pattern)

唯一性:确保类只有一个实例。全局访问:提供访问该实例的全局点。懒加载:实例在首次使用时才创建。单例模式在 Python 中是一种相对简单的创建型设计模式,通过确保类只有一个实例,提供了一个全局访问点。模块单例:利用模块的唯一性。类变量:在类中控制实例的创建。装饰器:通过装饰器实现。

Web安全工具库 937

我是如何理解单例模式(小白理解)

小白理解单例模式

weixin_48272323的博客 296

关于单例模式的一些理解

单例模式作为设计模式中的常见模式,比较重要。个人有感写了一些东西,助于自己理解单例模式。 首先:什么是单例模式?   单例模式视为了避免重复生成同一个实例对象,而产生的一种模式。因为对象在内存中占据空间较大,相比而言,我们更希望对于相同的对象,不必要每次都新建同样的对象。多个变量指向同一个对象。这样可以节省内存开销。 单例模式的核心是什么?   核心就是三私一公;   1、私有化的构造方...

weixin_30535167的博客 72

简易理解设计模式之:单例模式——单例模式的几种常用写法

介绍: 单例模式是一种创建型模式。它保证一个类仅有一个实例,并提供一个访问它的全局访问点。 类图: Singleton(单例类):定义一个getInstance操作,允许客户访问它的唯一实例,getInstance是一个静态方法,主要负责创建自己的唯一实例。 用法: • 确保某个类有且只有一个对象时。 个人理解: • 创建一个对象需要消耗过多资源时(IO操作、访问数据库等) • 工具类、帮助...

TwcatL 711

简单理解和运用单例模式

单例模式之饿汉式(普通) /** * 饿汉式 */ public class Singleton { //创建对象实例 private final static Singleton bean = new Singleton(); /** * 私有化构造方法,不能直接使用new关键字创建对象 */ private Singleton() { } /** * 通过这个方法来直接进行获取本对象的实例 * @retur

weixin_43960447的博客 155
上一篇: 静态代码块,在类加载时可以执行,但不一定会执行
下一篇: 类加载过程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值