一、单例模式的概念
单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点来访问该实例,是 Java 中最简单的设计模式之一。该模式常用于需要全局唯一实例的场景,例如日志记录器、配置管理、线程池、数据库连接池等。
注意:单例模式的构造方法必须要声明为private类型。
欢迎关注工 众号:ItBeeCoder,查看更多高质量技术文章,发送“后端”获取资料
二、实现方式
在Java中,单例模式有多种实现方式,每种方式都有其适用场景和优缺点。下面主要从每种方式的特点、Java代码实现方式及优缺点三个方面介绍几种常见的实现方式。
1.饿汉式(Eager Initialization)
1)特点
类加载时立即创建并初始化实例,是线程安全的,但由于有些类的实例并不会立即用到,这种方式可能会浪费资源,尤其是创建占用资源较多的大对象时,尤为明显。
2)代码实现
public class EagerSingleton {
// 类加载时直接创建实例
private static final EagerSingleton instance = new EagerSingleton();
// 私有构造函数防止外部实例化,这里构造函数必须为私有的
private EagerSingleton() {
}
public static EagerSingleton getInstance() {
return instance;
}
}
3)优缺点
使用这种方式创建单个示例的优缺点都比较明显。
优点:简单、线程安全。
缺点:实例在类加载时创建,若从未使用会导致资源浪费。
对于计算机技术感兴趣的读者,可以加入下裙,和更多行业爱好者分享、交流最新的技术。
2. 同步方法懒汉式(Lazy)(线程安全,性能差)
1)特点
这种方法通过在实例创建方法getInstance()前加synchronized关键字保证多线程环境下只能创建一个实例对象,这种方法保证线程安全,但性能较低(使用了synchronized 关键字,会导致操作系统用户态和内核态的切换,耗费时间和性能,深层原因后面会在介绍synchronized 关键字的文章里详细介绍)。
2)代码实现
public class SynchronizedSingleton {
private static S