目录
2)线程安全的懒汉式单例模式 (synchronized )
单例模式的定义:
单例模式能保证某个类在程序中只存在唯⼀⼀份实例,⽽不会创建出多个实例.
单例模式具体的实现⽅式有很多.最常⻅的是"饿汉"和"懒汉"两种.
饿汉式--单例模式
定义:
案例:
class Singleton {
// 私有静态成员变量,在类加载时就初始化实例
private static Singleton instance = new Singleton();
// 私有构造函数,防止外部通过new关键字创建实例
private Singleton() {}
// 公共静态方法,用于获取单例实例
public static Singleton getInstance() {
return instance;
}
}
优缺点:
懒汉式--单例模式:
定义:
1)懒汉式单例模式(非线程安全)
public class LazySingleton {
// 私有静态变量,用于存储单例对象
private static LazySingleton instance;
// 私有构造函数,防止外部通过new关键字创建新的实例
private LazySingleton() {}
// 公共的静态方法,用于获取单例对象
public static LazySingleton getInstance() {
if (instance == null) {
// 如果实例还未创建,则创建一个新的实例
instance = new LazySingleton();
}
return instance;
}
}
2)线程安全的懒汉式单例模式 (synchronized )
public class ThreadSafeLazySingleton {
private static ThreadSafeLazySingleton instance;
private ThreadSafeLazySingleton() {}
// 使用synchronized关键字修饰方法,保证在多线程环境下的线程安全
public static synchronized ThreadSafeLazySingleton getInstance() {
if (instance == null) {
instance = new ThreadSafeLazySingleton();
}
return instance;
}
}
3)双重检查锁定的懒汉式单例模式(线程安全)
public class DoubleCheckedLockingSingleton {
// 使用volatile关键字保证变量的可见性和禁止指令重排序
private static volatile DoubleCheckedLockingSingleton instance;
private DoubleCheckedLockingSingleton() {}
public static DoubleCheckedLockingSingleton getInstance() {
if (instance == null) {
// 第一次检查,提高性能,避免不必要的同步操作
synchronized (DoubleCheckedLockingSingleton.class) {
if (instance == null) {
// 第二次检查,确保在同步块内也不会创建多个实例
instance = new DoubleCheckedLockingSingleton();
}
}
}
return instance;
}
}
结语: 写博客不仅仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进。同时也希望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力!