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

在Java中实现线程安全的懒加载单例,关键是在保证实例延迟创建的同时,防止多个线程并发创建多个实例。以下是几种常用且有效的实现方式。
使用双重检查锁定(Double-Checked Locking)
这种方式既保证了懒加载,又提升了性能,因为只有在实例未创建时才进行同步。
public class Singleton { private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; }}
说明:使用 volatile 关键字确保多线程环境下实例的可见性和禁止指令重排序,synchronized 块保证同一时刻只有一个线程能初始化实例。
使用静态内部类(推荐)
利用类加载机制保证线程安全,同时实现懒加载。
立即学习“Java免费学习笔记(深入)”;
数控高级编程讲义 doc版
在数控加工中,行切和环切是典型的两种走刀路线。 行切在手工编程时多用于规则矩形平面、台阶面和矩形下陷加工,对非矩形区域的行切一般用自动编程实现。 环切主要用于轮廓的半精、精加工及粗加工,用于粗加工时,其效率比行切低,但可方便的用刀补功能实现。本书内容全面、实例丰富、全面系统,本平台提供数控高级编程讲义doc版下载,需要的朋友们可以下载看看吧!
0 查看详情
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() { // 业务方法 }}
说明:枚举实例在类加载时创建,不是严格意义上的懒加载(延迟到首次使用),但绝对线程安全,且防止反射攻击。
总结对比
双重检查锁定:支持懒加载,需正确使用 volatile,代码稍复杂。 静态内部类:推荐方式,天然线程安全,懒加载,代码简洁。 枚举:最安全,防反射,但实例在类加载时就创建,不完全懒加载。
如果追求简洁和安全,优先选择静态内部类方式。基本上就这些。
以上就是在Java中如何实现线程安全的懒加载单例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1036902.html
微信扫一扫
支付宝扫一扫