单例模式:饿汉式、懒汉式;线程安全的单例模式创建的6种方式

单例模式

单例模式Singleton是一种创建型模式,指某个采用Singleton单例模式,则这个类在同一个

JVM上,只能产生一个实例供外部访问,并且仅提供一个全局的访问方式。

懒汉式

懒汉式线程不安全

java 复制代码
public class Singleton1 {
	private static Singleton1 instance;
	
	// 构造方法私有化!!!
	private Singleton1() {};
	
	public static Singleton1 getInstance() {
		if(instance == null) {
			instance = new Singleton1();
		}
		return instance;
	}
}

饿汉式

饿汉式线程安全

java 复制代码
public class Singleton2 {
	private static final Singleton2 instance = new Singleton2();
	// 构造方法私有化
	private Singleton2() {};

	public static Singleton2 getInstance() {
		return instance;
	}
}

线程安全的单例模式

  1. 饿汉式线程安全
  2. 全局锁线程安全
  3. 静态代码块创建单例对象线程安全
  4. 双重校验锁实现线程安全
  5. 静态内部类实现线程安全的单例模式
  6. 内部枚举类实现线程安全
  • 全局锁

    java 复制代码
    public class Singleton3 {
    	private static Singleton3 instance;
    
    	// 构造方法私有化
    	private Singleton3() {};
    
    	// 通过synchronized添加全局锁实现线程安全
    	public static synchronized Singleton3 getInstance() {
    		if (instance == null) {
    			instance = new Singleton3();
    		}
    		return instance;
    	}
    }
  • 静态代码块

    java 复制代码
    public class Singleton4 {
    	private static final Singleton4 instance;
    	
    	// 静态代码块创建单例对象
    	static {
    		instance = new Singleton4();
    	}
    	
    	// 构造方法私有化
    	private Singleton4(){}
      
    	public static Singleton4 getInstance() {
    		return instance;
    	}
    }
  • 双重校验锁

    java 复制代码
    public class Singleton5 {
    
    	private static Singleton5 instance;
    
    	private Singleton5() {
    	}
    
    	public static Singleton5 getInstance() {
    		if (instance == null) {
    			synchronized (Singleton5.class) {
    				if (instance == null) {
    					instance = new Singleton5();
    				}
    			}
    		}
    		return instance;
    	}
    }
  • 静态内部类

    java 复制代码
    public class Singleton6 {
    	// 构造方法私有化
    	private Singleton6() {};
    	
    	// 静态内部类
    	private static class SingletonHolder{
    		// 创建单例对象
    		private static Singleton6 instance = new Singleton6();
    	}
    	public static Singleton6 getInstance() {
    		return Singleton6.SingletonHolder.instance;
    	}
    }
  • 静态枚举类

    java 复制代码
    public class Singleton7 {
    	private Singleton7() {}
    	
    	// 内部枚举类
    	enum SingletonEnum{
    		INSTANCE;
    		
    		// 单例对象
    		private Singleton7 instance;
        
    		private SingletonEnum() {
    			instance = new Singleton7();
    		}
        
    		private static Singleton7 getInstance() {
    			return SingletonEnum.INSTANCE.instance;
    		}
    	}
    }	
相关推荐
项目管理小胡6 小时前
2026年项目管理工具选型指南:功能对比、适用场景与避坑建议
java·python·安全·团队开发·个人开发
OPHKVPS8 小时前
Metro4Shell攻击进行中:CVE-2025-11953高危漏洞正被用于入侵React Native开发者机器
安全·web安全
黎阳之光8 小时前
黎阳之光:数智科技破局湖库富营养化,筑造水生态治理新标杆
大数据·人工智能·科技·安全·数字孪生
探索者019 小时前
网络安全进阶学习:SSRF(服务器端请求伪造)漏洞全解析
安全·web安全·ssrf
Figo_Cheung9 小时前
Figo数字时代科学创新的伦理安全策略及技术实现——AI参与科学创新的伦理安全审查
人工智能·安全
123过去10 小时前
crunch使用教程
linux·测试工具·安全
乐迪信息11 小时前
乐迪信息:船舶AI逆行检测算法在单向航道中的强制管控
大数据·人工智能·安全·计算机视觉·目标跟踪
小程故事多_8012 小时前
无 GitAI 依赖|企业 AI 编码合规管控 + 全生命周期追溯,实现效率与安全双向破局
人工智能·安全·架构·aigc·ai编程·harness
lingggggaaaa12 小时前
PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
数据库·sql·安全·web安全·php
OPHKVPS12 小时前
严重漏洞曝光:Google Fast Pair(WhisperPair)允许攻击者在 14 米内无声劫持无线耳机、窃听对话并追踪位置
安全