创建单例模式的六种方式

一、单例模式

  1. 单例模式是一种创建型的设计模式,构造函数是私有的,因此只能在类中创建一个实例,且对外提供一个静态公有方法获取这个实例。

二、创建方法

1. 懒汉式(线程不安全)

java 复制代码
public class Singleton{
	private static Singleton instance;
	private Singleton(){}
	public static Singleton getInstance(){
		if(instance==null){ //多线程时,此处会产生线程安全问题
			instance = new Singleton();
		}
		return instance;
	}
}

2. 懒汉式(线程安全)

java 复制代码
public class Singleton{
	private static Singleton instance;
	private Singleton(){}
	public synchronized static Singleton getInstance(){
		if(instance==null){
			instance=new Singleton();
		}
		return instance;
	}

3. 双重检查锁(DCL,Double-Checked Locking)(线程安全)

java 复制代码
public class Singleton{
	private volatile static Singleton instance;
	private Singleton(){};
	public static Singleton getInstance(){
		if(instance==null){
			synchronized(Singleton.class){
				if(instance==null){
					instance=new Singleton();
				}
			}
		}
		return instance;
	}
}

4. 饿汉式(线程安全)

java 复制代码
public class Singleton{
	private final static Singleton instance=new Singleton();
	private Singleton(){}
	public static Singleton getInstance(){
		return instance;
	}

5. 静态内部类(线程安全)

java 复制代码
public class Singleton{
	private Singleton(){}
	private static class InnerClass{
		private final static Singleton INSTANCE=new Singleton();
	} 
	public static Singleton getInstance(){
		return InnerClass.INSTANCE;
	}
}

6. 枚举类(线程安全)

java 复制代码
public enum Singleton{
	INSTANCE;
	public void doSomething(String str){
		System.out.println(str);
	}
}
相关推荐
夫唯不争,故无尤也8 分钟前
JavaWeb流式传输速查宝典
java·流式传输
苏小瀚1 小时前
算法---位运算
java·算法
Camel卡蒙1 小时前
数据结构——二叉搜索树Binary Search Tree(介绍、Java实现增删查改、中序遍历等)
java·开发语言·数据结构
2401_841495641 小时前
【数据结构】基于Floyd算法的最短路径求解
java·数据结构·c++·python·算法··floyd
珹洺2 小时前
Java-Spring入门指南(二十七)Android Studio 第一个项目搭建与手机页面模拟器运行
java·spring·android studio
程序猿DD2 小时前
Java 25 中的 6 个新特性解读
java·后端
稻草猫.2 小时前
文件 IO
java·笔记·后端·java-ee·idea
laopeng3012 小时前
基于Spring AI Deep Researcher Agent
java·人工智能·spring
子豪-中国机器人2 小时前
《C++ STL 基础入门》教案
java·开发语言
java_t_t2 小时前
集合工具类
java·集合