创建单例模式的六种方式

一、单例模式

  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);
	}
}
相关推荐
卡尔特斯3 小时前
Android Kotlin 项目代理配置【详细步骤(可选)】
android·java·kotlin
白鲸开源3 小时前
Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
java·ubuntu·开源
ytadpole3 小时前
Java 25 新特性 更简洁、更高效、更现代
java·后端
纪莫4 小时前
A公司一面:类加载的过程是怎么样的? 双亲委派的优点和缺点? 产生fullGC的情况有哪些? spring的动态代理有哪些?区别是什么? 如何排查CPU使用率过高?
java·java面试⑧股
JavaGuide4 小时前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户3721574261354 小时前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源4 小时前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
Java中文社群5 小时前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试
代码匠心5 小时前
从零开始学Flink:数据源
java·大数据·后端·flink
间彧5 小时前
Spring Boot项目中如何自定义线程池
java