赞
踩
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供全局访问点来获取该实例。在 Java 中,实现单例模式有两种常见的方式:
1.懒汉式单例:
懒汉式单例在首次请求时才创建实例,如果实例已经存在,则返回现有实例。
这种方式的优点是节省了资源,因为只有在需要时才会创建对象。但是,需要注意多线程并发访问的情况,需要进行额外的同步控制以确保只创建一个实例
- public class LazySingleton {
- private static LazySingleton instance;
-
- private LazySingleton() {
- // 私有构造方法
- }
- //getInstance() 方法使用了 synchronized 关键字来确保线程安全,但这会带来性能开销
- public static synchronized LazySingleton getInstance() {
- if (instance == null) {
- instance = new LazySingleton();
- }
- return instance;
- }
- }
2.饿汉式单例:
饿汉式单例在类加载时就创建实例,因此不存在多线程并发访问的问题。这种方式的缺点是如果该实例很大或者在应用程序启动时就不需要,会浪费资源
- //不需要额外的同步控制,因为实例在类加载时就已经创建,不存在竞争条件
- public class EagerSingleton {
- private static final EagerSingleton instance = new EagerSingleton();
-
- private EagerSingleton() {
- // 私有构造方法
- }
-
- public static EagerSingleton getInstance() {
- return instance;
- }
- }
总结:
如果希望延迟实例化并考虑多线程安全性,用懒汉式单例,
如果希望简单明了且不担心资源浪费,用饿汉式单例
另外,还可以考虑使用双重检查锁定等方式来改进懒汉式单例的性能
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。