1.静态内部类
静态内部类:第一次引用静态内部类的静态成员或调用静态方法时,会触发该静态内部类的加载
2.代码实现

- 在这里,
Singleton的实例INSTANCE被设置为静态内部类SingletonHandler的静态成员 - 当我们第一次调用
getInstance方法,访问了SingletonHandler.INSTANCE,由于SingletonHandler是静态内部类,那么根据静态内部类的特性,就会触发该静态内部类的加载,即JVM就会帮我们完成静态成员INSTANCE的创建,这样子,JVM帮我们保证了线程安全,而且这还是懒加载的方式(需要才创建) - 后续再调用
getInstance方法,由于INSTANCE已经创建好了,所以直接返回即可
静态内部类这就讲完了,哈哈,是不是比懒汉式-“双重检查锁+volatile“的实现方式简单很多,所以用静态内部类实现单例比较推荐
注意:这里要将静态内部类SingletonHandler私有化,只能在Singleton内部使用
3.代码测试
public class TestDemo {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println("s1 == s2: " + (s1 == s2)); // s1 == s2: true
}
}
4.总结
- 优点
- 实现简单
- 线程安全
- 支持延迟加载
- 支持高并发
- 缺点
- 由于在Singleton内部构建了静态内部类SingletonHandler,导致Singleton的结构略显复杂
本文介绍了如何使用静态内部类在Java中实现单例模式,强调了其简洁性、线程安全和懒加载特性。通过实例代码和测试,展示了这种实现方式相较于传统方法的优势和结构复杂性。





