静态内部类是实现线程安全懒加载单例的推荐方式,利用JVM类加载机制保证实例唯一性和延迟初始化,代码简洁且高效。

在Java中实现线程安全的懒加载单例,关键是在保证实例延迟创建的同时,防止多个线程并发创建多个实例。以下是几种常用且有效的实现方式。
这种方式既保证了懒加载,又提升了性能,因为只有在实例未创建时才进行同步。
public class Singleton {
<strong>private static volatile Singleton instance;</strong>
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
说明:使用 volatile 关键字确保多线程环境下实例的可见性和禁止指令重排序,synchronized 块保证同一时刻只有一个线程能初始化实例。
利用类加载机制保证线程安全,同时实现懒加载。
立即学习“Java免费学习笔记(深入)”;
public class Singleton {
private Singleton() {}
private static class Holder {
static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return Holder.INSTANCE;
}
}
说明:JVM 保证类的静态内部类在首次访问时才加载,且只加载一次。这种方式简洁、高效、线程安全,且支持懒加载,是推荐做法。
Effective Java 中推荐的方式,防止反射和序列化破坏单例。
public enum Singleton {
INSTANCE;
public void doSomething() {
// 业务方法
}
}
说明:枚举实例在类加载时创建,不是严格意义上的懒加载(延迟到首次使用),但绝对线程安全,且防止反射攻击。
如果追求简洁和安全,优先选择静态内部类方式。基本上就这些。
以上就是在Java中如何实现线程安全的懒加载单例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号