单例模式是设计模式中的一种,它的核心思想是确保一个类在整个应用程序中只存在一个实例,并提供一个全局访问点来获取这个实例。
这在需要控制资源访问、节省系统开销或者协调共享状态的场景下特别有用,比如配置管理器、线程池和数据库连接池等。
单例模式的几种实现方式
在Java中,实现单例模式有多种方式,但核心目标都是确保实例的唯一性。其中,线程安全是实现过程中必须考虑的重要因素,尤其是在多线程环境下。以下是几种常见的实现方式及其线程安全讨论:
1. 饿汉式(静态常量/静态代码块)
特点:类加载时立即创建实例,线程安全,但可能导致资源浪费。
1public class Singleton {
2 private static final Singleton INSTANCE = new Singleton();
3
4 private Singleton() {}
5
6 public static Singleton getInstance() {
7 return INSTANCE;
8 }
9}
- 线程安全分析:由于实例是在类加载时由JVM保证线程安全地初始化,因此这种方式天然线程安全。
2. 懒汉式(线程不安全)
特点:延时加载,但在多线程环境下可能创建多个实例。
1public class Singleton {
2 private static Singleton instance;
3
4 private Singleton() {}