欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > 【设计模式】【创建型5-1】【单例模式】

【设计模式】【创建型5-1】【单例模式】

2025/4/22 9:36:18 来源:https://blog.csdn.net/SHI_IHS/article/details/139992304  浏览:    关键词:【设计模式】【创建型5-1】【单例模式】

文章目录

  • 单例模式
    • 懒汉模式
    • 饿汉模式
    • 双重锁校验的单例模式
    • 枚举单例
    • 单例模式在实际开发中的应用

单例模式

懒汉模式

/**** 单例 懒汉模式* 使用的时候再创建实例* 线程不安全*/
public class LazeSingle {private static LazeSingle lazeSingle;public LazeSingle() {}public static LazeSingle getLazeSingle() {if (lazeSingle == null) {lazeSingle = new LazeSingle();}return lazeSingle;}
}

饿汉模式

/**** 饿汉模式 线程安全* 加载的时候就实例化了*/
public class HungrySingle {private static HungrySingle hungrySingle = new HungrySingle();public static HungrySingle getHungrySingle(){return hungrySingle;}
}

双重锁校验的单例模式

为什么要做双重锁校验
代码中 假设两个线程 都通过了第一判空 阻塞在synchronized锁上 其中一个获取锁成功 另外一个阻塞,
此时 第一个创建了新的对象返回 如果没有第二次判空校验 那么 第二个会在第一个释放锁以后 重新创建对象 这就是有问题的 此时如果有判空的话 可以避免此场景

/**** 双重锁校验的单例模式 线程安全*/
public class DoubleLockSingle {private static volatile DoubleLockSingle doubleLockSingle;public DoubleLockSingle() {}public static DoubleLockSingle getDoubleLockSingle() {if (doubleLockSingle == null) {synchronized (DoubleLockSingle.class) {if (doubleLockSingle == null) {doubleLockSingle = new DoubleLockSingle();}}}return doubleLockSingle;}
}

枚举单例

  1. 线程安全:枚举单例模式在创建实例时自动处理线程同步问题,因此您无需担心多线程环境下的竞争条件。
  2. 序列化安全:枚举单例模式在序列化和反序列化过程中保持单例特性。这意味着,当您将单例对象序列化到磁盘并再次读取时,您将获得相同的实例。
  3. 简洁性:与其他单例模式实现相比,枚举单例模式更简洁,易于理解。您只需创建一个枚举类型,并将实例定义为枚举常量。
public enum SingleEnum {INSTANCE;private final Object obj;SingleEnum() {this.obj = new Object();}public Object getString() {return obj;}
}public static void main(String[] args) {SingleEnum instance = SingleEnum.INSTANCE;SingleEnum instance2 = SingleEnum.INSTANCE;System.out.println(instance);System.out.println(instance2);System.out.println(instance.getString());System.out.println(instance2.getString());}
/* 打印结果
INSTANCE
INSTANCE
java.lang.Object@707f7052
java.lang.Object@707f7052 */

单例模式在实际开发中的应用

作为配置类存在。
一般配置只能有一份。
作为缓存存在。
比如要在内存里记录一些东西。可能使用饿汉模式直接存储。
线程池。
使用双重锁校验模式,创建线程池。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词