Java 单例模式
Java 单例模式示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package com.joyupx.cms.example.single; /** * 多线程环境中保证单例的写法。 * @author hapday */ public class SingleInstanceExample { private static SingleInstanceExample singleInstanceExample; private SingleInstanceExample() {} public static SingleInstanceExample getInstance() { // 防止重复创建对象,保证只创建一次。 if ( null == singleInstanceExample) { synchronized (SingleInstanceExample. class ) { // 防止多线程并发时其它线程再创建对象导致的重复,进一步保证只创建一次。 if ( null != singleInstanceExample) { singleInstanceExample = new SingleInstanceExample(); } } } return singleInstanceExample; } } |
多线程环境下的单例模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package com.joyupx.cms.example.thread.volatileVariable; /** * 双重检查锁定(Double-Checked Locking)与 volatile。 * 在单例模式的实现中,双重检查锁定是一种常见的做法,而 volatile 关键字在这里用于确保实例变量的可见性。 * 在这个示例中,instance 变量被声明为 volatile,以确保在多线程环境中,当一个线程创建了 Singleton 实例后,其他线程能够立即看到这个变化。 * 这是因为在没有 volatile 修饰的情况下,编译器可能会对 instance 变量的读取进行优化(如将其缓存在线程本地),从而导致其他线程看不到最新的值。 */ public class Singleton { // volatile 确保 instance 的可见性 private static volatile Singleton instance = null ; // 私有构造函数防止实例化 private Singleton() {} // 公共静态方法用于获取实例 public static Singleton getInstance() { // 防止重复创建对象,保证只创建一次。 if (instance == null ) { // 第一次检查,无需同步 synchronized (Singleton. class ) { // 防止多线程并发时其它线程再创建对象导致的重复,进一步保证只创建一次。 if (instance == null ) { // 第二次检查,需要同步 instance = new Singleton(); } } } return instance; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端