技术文摘
面试必备:单例模式的多种写法
2024-12-31 02:06:14 小编
面试必备:单例模式的多种写法
在软件开发中,单例模式是一种常见且重要的设计模式。它确保一个类只有一个实例存在,并提供全局访问点。下面将为您介绍几种常见的单例模式写法。
懒汉式单例
懒汉式单例在第一次被调用时才创建实例,实现代码如下:
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
这种方式的优点是延迟加载,只有在需要时才创建实例,节省资源。但在多线程环境下可能会出现多个实例的问题。
饿汉式单例
饿汉式单例在类加载时就创建实例,代码如下:
public class EagerSingleton {
private static final EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return instance;
}
}
饿汉式单例的优点是简单、线程安全,但可能会造成资源的提前消耗。
双重检查锁单例
为了解决懒汉式单例在多线程环境下的问题,可以使用双重检查锁,代码如下:
public class DoubleCheckSingleton {
private static DoubleCheckSingleton instance;
private DoubleCheckSingleton() {}
public static DoubleCheckSingleton getInstance() {
if (instance == null) {
synchronized (DoubleCheckSingleton.class) {
if (instance == null) {
instance = new DoubleCheckSingleton();
}
}
}
return instance;
}
}
通过双重检查,既保证了线程安全,又提高了性能。
静态内部类单例
这种方式利用了 Java 的类加载机制,实现如下:
public class StaticInnerClassSingleton {
private StaticInnerClassSingleton() {}
public static StaticInnerClassSingleton getInstance() {
return InnerClass.instance;
}
private static class InnerClass {
private static final StaticInnerClassSingleton instance = new StaticInnerClassSingleton();
}
}
这是一种较为优雅且线程安全的实现方式。
在面试中,了解并能熟练阐述这些单例模式的写法及其优缺点,将为您的面试表现加分不少。能够根据具体的业务场景选择合适的单例模式实现,更能展现您的技术水平和问题解决能力。
- 有哪些redis分布式ID解决方法
- mysql 有哪些语法规范
- MySQL主从复制配置方法
- MySQL 表级锁、行级锁、排他锁与共享锁解析
- MySQL 读页缓冲区 buffer pool 有哪些知识点
- MySQL 表锁、行锁、排它锁与共享锁的使用方法
- Redis 之 String 数据类型实例剖析
- Go语言实现Redis读写分离的方法
- MySQL 踩坑:count distinct 多列问题的解决办法
- MySQL 中实现字符串截取的方法
- 为何要把数据从MySQL复制到Redshift
- MySQL常见高可用架构部署方案有哪些
- SpringBoot集成Redis实现缓存机制的方法
- 如何使用Redis的特殊数据类型
- CentOS 7.5 利用源码包部署安装 Redis 6.2.0 的方法