java设计模式
1.懒汉模式:延迟加载,只有在真正使用的时候才进行实例化
- 1.线程安全问题
- 2.double check 加锁优化
- 3.编译器(JIT,CPU)有可能会对指令进行重新排序,导致使用到还没有初始化的实例,可以通过添加volatile关键字进行修饰,对于volatile可以防止重排序
1 | class LazySington{ |
2.饿汉模式
类加载的初始化阶段就完成了实例的初始化。本质上就是借助于jvm类加载机制,保证实例的唯一性。
类加载过程:
1.加载二进制数据到内存中,生成对于的class数据结构
2.连接:a验证 b准备(给类的静态成员变量赋默认值) c解析
3.初始化:给类的静态变量赋初值
只有在真正使用对应类时,才会触发初始化 如(当前类是启动类即main函数所在类,直接进行new操作,访问静态属性、访问静态用法,利用反射访问类,初始化一个类的子类等)
1 | //饿汉模式 |
静态内部类
- 1.本质上是利用类的加载机制来保证线程安全
- 2.只有在实际使用的时候,才会触发类的初始化,所以也是懒加载的一种形式
注意点 以上所有按照类来使用单例都可以通过反射的机制 实例化出类 还是不安全
再java1.5后出了enum枚举这个类 这个类是再反射期间不能够操作的 所以用enum相对来说比较安全
1 | public enum SingletonEnum { |
- Title: java设计模式
- Author: faith team
- Created at: 2023-06-28 09:06:05
- Updated at: 2025-11-29 09:01:08
- Link: https://redefine.ohevan.com/2023/06/28/20230712java设计模式/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments