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

同程网 网站模板福步外贸论坛网官网

同程网 网站模板,福步外贸论坛网官网,顺德网站建设找顺的,2021最火电商平台在单例设计模式中,懒汉式(Lazy Initialization) 通过延迟实例化来优化资源使用,但在多线程环境下存在线程安全问题。以下是其核心问题及解决方案的详细解析: 一、基础懒汉式代码(线程不安全) pu…

在单例设计模式中,懒汉式(Lazy Initialization) 通过延迟实例化来优化资源使用,但在多线程环境下存在线程安全问题。以下是其核心问题及解决方案的详细解析:


一、基础懒汉式代码(线程不安全)

public class Singleton {private static Singleton instance;private Singleton() {} // 私有构造器public static Singleton getInstance() {if (instance == null) {         // 步骤1:检查实例是否存在instance = new Singleton(); // 步骤2:创建实例}return instance;}
}
问题分析

当多个线程同时调用 getInstance() 时:

  1. 线程A 进入步骤1,发现 instance 为 null

  2. 线程B 同时进入步骤1,同样发现 instance 为 null

  3. 两个线程都会执行步骤2,创建多个实例,违反单例原则。


二、解决方案

1. 同步方法(线程安全,效率低)

public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;
}
  • 优点:简单直接,确保线程安全。

  • 缺点:每次调用 getInstance() 都需要同步,性能差(99% 情况下实例已存在,无需同步)。


2. 双重检查锁(Double-Check Locking,DCL)

public class Singleton {private static volatile Singleton instance; // volatile 禁止指令重排序private Singleton() {}public static Singleton getInstance() {if (instance == null) {                  // 第一次检查(无锁)synchronized (Singleton.class) {     // 加锁if (instance == null) {          // 第二次检查(有锁)instance = new Singleton();  // 创建实例}}}return instance;}
}
关键点
  • 双重检查:减少锁竞争,只有第一次创建实例时同步。

  • volatile 关键字:禁止 JVM 指令重排序,防止返回未初始化完成的实例。

    • instance = new Singleton() 的代码实际分为三步:

      1. 分配内存空间。

      2. 初始化对象。

      3. 将 instance 指向分配的内存。

    • 若无 volatile,可能发生指令重排(步骤3在步骤2之前执行),导致其他线程获取到未初始化的实例。


3. 静态内部类(推荐)

public class Singleton {private Singleton() {}private static class Holder {private static final Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {return Holder.INSTANCE; // 类加载时初始化实例}
}
原理
  • JVM 在加载外部类时不会加载内部类,只有调用 getInstance() 时才会加载 Holder 类。

  • 类加载过程是线程安全的,由 JVM 保证,天然避免多线程问题。


4. 枚举实现(最佳实践)

public enum Singleton {INSTANCE; // 单例实例public void doSomething() {// 业务方法}
}
优点
  • 线程安全由 JVM 保证。

  • 防止反射攻击(无法通过反射创建枚举实例)。

  • 防止反序列化生成新对象。


三、方案对比

方案线程安全性能实现复杂度防反射/反序列化
同步方法
双重检查锁
静态内部类
枚举

四、总结

  • 基础懒汉式:多线程下不安全,需改进。

  • 同步方法:简单但性能差,不推荐高并发场景。

  • 双重检查锁:性能优,需配合 volatile

  • 静态内部类:推荐方案,兼顾安全与性能。

  • 枚举:最佳实践,支持防反射和反序列化。

http://www.dtcms.com/a/417898.html

相关文章:

  • 威海网站推广怎样切换到经典编辑器wordpress
  • 万网服务器网站建设wordpress 手机不显示内容
  • 一个空间两个php网站三七游戏官网
  • 南宁庆云网站建设WordPress如何设置站点名称
  • 一元购网站开发做网站fjfzwl
  • 辽宁建设工程信息网老网站五八同城找工作
  • 新站seo外包抖音关键词排名优化软件
  • 怎么查看一个网站是谁做的做一个网站多少钱
  • 购买网站项目管理系统平台
  • 天津做网站制作公司正规的网店平台有哪些
  • 服饰团购网站建设做签到的网站
  • 扬州公司做网站公司长沙哪里做网站价格便宜
  • 做响应式网站价格电子工程王粟
  • 自己做网站去哪买服务器小程序制作流程步骤
  • 前端静态网站模板wordpress预加载
  • php企业中英文网站源码学习搭建网站
  • 做公司网站棋牌泉州最专业手机网站建设开发
  • 广州论坛网站建设本地网站搭建视频教程
  • 青岛 制作网站 大点的公司网络营销推广公司
  • 建筑公司网站排名嘉兴网站关键词推广
  • 智能手表网站网络营销网站建设与策划分析
  • 网页设计和网站建设网页素材提取
  • 东莞有哪些做网站浦东注册公司
  • 广州增城区门户网站大连开发区二手房最新房源
  • 做跨境网站wap免费建站
  • 网站内的搜索怎么做阿里网站注册
  • 福州网站开发网站建设相关优化
  • 做网上贸易哪个网站好微信公众平台个人注册入口
  • 深圳建设信息网站广州免费设计网站建设
  • 常熟做网站多少钱按建设银行网站公告