一、单例模式

  • 目的 : 确保一个类只有一个实例,并提供全局访问点。
  • 核心 : 私有化构造函数,提供静态方法获取唯一实例。
  • 场景 : 全局配置(如数据库连接、系统参数),全局共享的缓存实例(如 Redis 客户端、内存缓存)
java 复制代码
public class Singleton {
	private static volatile Singleton instance;  	// volatile 防止指令重排序,保证拿到的是完整对象

	private Singleton(){ }

	public static Singleton getSingleton() {

		if(instance == null){						// 第一次检查(非同步,提高性能) 点菜,第一次叫服务员,服务员先看看有没有订单
			synchronized (Singleton.class) {		// 同步块	获得 Singleton.class 这个类对象的锁 一个包间里面只能进一个服务员
				if(instance == null){				// 第二次检查(防止重复创建)	  服务员A、B都看见订单是空的,同时来到包间前。A获得锁进入包间,
					instance = new Singleton();		// 通过第二次检查成功下单,然后释放锁走出包间。此时B才获得锁进入包间,检查到A已经下单,所以直接返回创建好的订单。
				}
			}
		}
		return instance;
	};
}

这是单例模式的类图

各种符号代表的意思

复制代码
+ 	Public(公有)

-	Private(私有)

#	Protected(受保护)

~	Package(包内/默认)
相关推荐
重生之我是Java开发战士14 天前
【Java SE】多线程(三):单例模式,阻塞队列,线程池与定时器
java·javascript·单例模式
许彰午15 天前
34_Java设计模式之单例模式
java·单例模式·设计模式
罗超驿17 天前
10.Java单例模式全解析:饿汉式与懒汉式实现及线程安全深度剖析
安全·单例模式·javaee
布朗克16817 天前
33 设计模式精讲
java·单例模式·设计模式
雨浓YN17 天前
基于设计模式的Winform软件框架-01Xml\Log\Ini日志(单例模式+生产者消费者模式)
单例模式·设计模式
仙俊红18 天前
Java 单例模式:类里面为什么可以有自己类型的字段?
java·开发语言·单例模式
swordbob18 天前
prototype 注入到 singleton 里,prototype是否还是线程安全的
安全·spring·单例模式·原型模式
谁似人间西林客20 天前
工业大数据实战:看中国智造如何用数据驱动效率革命
大数据·单例模式
张小姐的猫20 天前
【Linux】多线程 —— 线程池 | 单例模式 | 常见锁
linux·运维·服务器·c++·单例模式·设计模式·策略模式
Java面试题总结21 天前
双重检验锁的单例模式在高并发下的可见性问题
单例模式