当前位置: 首页 > wzjs >正文

深圳做网站那里好如何在百度推广自己的产品

深圳做网站那里好,如何在百度推广自己的产品,最稳定的免费的资源共享网站,网站备案换公司吗Java单例模式终极指南:从原理到防御性编程 目录 单例模式的核心思想五大经典实现方式 2.1 饿汉式(Eager Initialization)2.2 懒汉式(Lazy Initialization)2.3 双重检查锁(Double-Checked Locking&#xf…

Java单例模式终极指南:从原理到防御性编程

目录

  1. 单例模式的核心思想
  2. 五大经典实现方式
    • 2.1 饿汉式(Eager Initialization)
    • 2.2 懒汉式(Lazy Initialization)
    • 2.3 双重检查锁(Double-Checked Locking)
    • 2.4 静态内部类(Static Inner Class)
    • 2.5 枚举(Enum)
  3. 进阶:防御反射与序列化攻击
  4. 性能对比与选型建议
  5. 应用场景与实战案例
  6. 高频面试题剖析

1. 单例模式的核心思想

1.1 定义

确保一个类仅有一个实例,并提供该实例的全局访问点

1.2 三大核心要素

  1. 私有化构造器:禁止外部通过new创建实例
  2. 静态私有实例:持有唯一实例的引用
  3. 静态公有方法:提供全局访问入口

1.3 设计价值

  • 资源控制:如数据库连接池
  • 配置管理:全局唯一配置中心
  • 日志记录:避免日志写入冲突

2. 五大经典实现方式

2.1 饿汉式(Eager Initialization)

实现原理

类加载时立即初始化实例,利用类加载机制保证线程安全。

public class EagerSingleton {// 1. 静态私有实例(类加载时初始化)private static final EagerSingleton INSTANCE = new EagerSingleton();// 2. 私有构造器private EagerSingleton() {}// 3. 全局访问点public static EagerSingleton getInstance() {return INSTANCE;}
}
特点分析
维度说明
线程安全✅ 类加载机制保证
资源占用❌ 可能造成资源浪费
反射防御❌ 无法阻止反射攻击

2.2 懒汉式(Lazy Initialization)

基础版(线程不安全)
public class LazySingleton {private static LazySingleton instance;private LazySingleton() {}// 线程不安全!public static LazySingleton getInstance() {if (instance == null) {instance = new LazySingleton();}return instance;}
}
同步锁版(线程安全但低效)
public class SyncLazySingleton {private static SyncLazySingleton instance;private SyncLazySingleton() {}// 方法级同步锁,性能差public static synchronized SyncLazySingleton getInstance() {if (instance == null) {instance = new SyncLazySingleton();}return instance;}
}
特点分析
版本线程安全性能适用场景
基础版⚡️ 极高单线程环境
同步锁版🐢 低效低并发场景

2.3 双重检查锁(Double-Checked Locking)

最佳实践(JDK5+)
public class DCLSingleton {// volatile禁止指令重排序private static volatile DCLSingleton instance;private DCLSingleton() {}public static DCLSingleton getInstance() {if (instance == null) {                    // 第一次检查synchronized (DCLSingleton.class) {    // 加锁if (instance == null) {             // 第二次检查instance = new DCLSingleton();}}}return instance;}
}
关键技术点
  1. volatile关键字

    • 防止JVM指令重排序(避免返回未初始化的对象)
    • 保证内存可见性(多线程环境下实例状态一致)
  2. 双重判空逻辑

    • 外层检查:避免每次访问都加锁
    • 内层检查:防止多个线程同时通过外层检查

2.4 静态内部类(Static Inner Class)

实现原理

利用类加载机制的延迟初始化特性,实现线程安全的懒加载。

public class InnerClassSingleton {private InnerClassSingleton() {}// 静态内部类持有实例private static class Holder {static final InnerClassSingleton INSTANCE = new InnerClassSingleton();}public static InnerClassSingleton getInstance() {return Holder.INSTANCE;}
}
优势分析
  • 懒加载:只有调用getInstance()时才会加载Holder
  • 线程安全:由类加载器保证
  • ⚡️ 高性能:无锁竞争

2.5 枚举(Enum)

《Effective Java》推荐方案
public enum EnumSingleton {INSTANCE;// 添加业务方法public void doSomething() {System.out.println("枚举单例执行操作");}
}
// 调用:EnumSingleton.INSTANCE.doSomething();
核心优势
  1. 绝对防止反射攻击
    • JVM禁止通过反射创建枚举实例
  2. 自动处理序列化
    • 枚举实例反序列化时不会生成新对象
  3. 代码极简
    • 天然支持单例特性,无需额外代码

3. 进阶:防御反射与序列化攻击

3.1 反射防御方案

通过构造器中抛出异常,阻止反射调用。

private DCLSingleton() {if (instance != null) {throw new RuntimeException("禁止反射破坏单例!");}
}

3.2 序列化防御方案

实现readResolve()方法,指定反序列化时返回现有实例。

public class SerializableSingleton implements Serializable {private static final long serialVersionUID = 1L;private static SerializableSingleton instance = new SerializableSingleton();private SerializableSingleton() {}// 关键方法:反序列化时返回已有实例private Object readResolve() {return instance;}
}

4. 性能对比与选型建议

实现方式线程安全懒加载防反射防序列化性能
饿汉式⚡️ 高
双重检查锁⚡️ 高
静态内部类⚡️ 高
枚举⚡️ 高

选型建议

  • 简单场景:枚举(优先)或饿汉式
  • 延迟加载:静态内部类
  • 旧版本JDK:双重检查锁

5. 应用场景与实战案例

5.1 经典应用场景

  1. 配置管理器
    public class ConfigManager {private static ConfigManager instance;private Properties configs;private ConfigManager() {// 加载配置文件}public static ConfigManager getInstance() { ... }
    }
    
  2. 线程池管理
  3. 日志记录器

5.2 Spring框架中的单例

  • Bean作用域:默认单例(通过IoC容器管理)
  • 实现差异:非传统单例模式,依赖容器控制生命周期

6. 高频面试题剖析

6.1 为什么枚举单例是最佳实践?

  • 天然防御反射和序列化攻击
  • 代码简洁,JVM层支持

6.2 双重检查锁为何需要volatile?

  • 防止指令重排序导致的部分初始化对象问题
  • 保证多线程环境下的可见性

6.3 如何实现线程安全且高效的懒加载?

  • 优先选择:静态内部类(无锁)或枚举
  • 次优选择:双重检查锁+volatile

---**注**:本文代码示例基于JDK 17,反射防御代码需根据具体实现调整。枚举单例是《Effective Java》作者Joshua Bloch强烈推荐的方式。
http://www.dtcms.com/wzjs/103346.html

相关文章:

  • 网站建设的调研报告百度云网盘官网
  • 网站建设征收文化事业建设费吗百度热搜榜怎么打开
  • 简约型网站建设seo公司上海
  • 老师教学生做网站吗百度自媒体平台
  • 手机网站建设 移商动力seo黑帽教程视频
  • 做动态图片下载哪个网站好百度网址大全 旧版本
  • wordpress主题进的慢湖南seo优化公司
  • 我要自学网下载seo如何快速排名百度首页
  • 设计网络武汉百度seo排名
  • 自己做网站切入地图游戏推广员
  • 如何做ps4的游戏视频网站百度快速排名用是
  • 代做计算机毕业设计网站灰色词排名接单
  • 百度站长工具seo查询seo收录排名
  • 南京汽车 企业 网站建设电子商务网店运营推广
  • 上海工商网上企业查名重庆公司seo
  • 图片网站 seo万能软文范例800字
  • 织梦网站程序安装2022年小学生新闻摘抄十条
  • 网站开发环境搭建章节教材书互动营销案例都有哪些
  • 最好用的设计网站安徽网络推广和优化
  • 网站建设 软件有哪些方面网络加速器
  • 网站做跳转链接的好处网站排名优化+o+m
  • 税务网站建设管理指导思想花西子网络营销案例分析
  • 知网网站开发百度seo点击器
  • 北京的网站建设公司襄阳seo优化排名
  • wordpress发表简短文字seo优化厂商
  • 郑州优化疫情优化关键词的步骤
  • 哪里做网站需求网易疫情实时最新数据
  • 深圳企业官网网站建设哪家好搜一搜
  • 关于做网站的笑话宁波seo网络推广产品服务
  • 生物科技企业网站做的比较好的b站视频推广的方法有哪些