Please enable JavaScript.
Coggle requires JavaScript to display documents.
单例模式 - Coggle Diagram
单例模式
实现方式
双重锁定
翻译:Double-Check Locking
实现:先判断实例式否存在,不存在再加锁处理,锁里面再判断实例式否存在,不存在再初始化实例
特点
多线程情况下,防止重复初始化实例
第一个判断,能减少锁使用,提高性能
饿汉式单例
概念:实例初始化时间是在自己被加载时,就将自己实例化
特点
不支持延迟加载
初始化时间可能比较长(可接受)
实例 创建过程是线程安全的
懒汉式单例
概念:实例初始化时间是在丢一次被引用时,才会将自己实例化
特点
实例创建过程需要加锁
支持延迟加载
不支持高并发
example
数据库连接句柄client,全局唯一
日志client、SDKclient
GO实现
利用 init 实现饿汉式单例
init 加载流程:import --> const --> var --> init() 参考链接:
https://mdimg.pygo.fun/img/20221025111638-goinit.png
init 从 main 包开始、深度搜索
利用 Once.Do + 双重锁定 实现懒汉式
用处
数据在系统中只存储一份,适合使用单例模式
概念
单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点