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

Kotlin 中实现单例模式的几种常见模式

1 懒汉式,线程安全(伴生对象 + by lazy

想“懒汉”一样,拖延到首次使用时才进行初始化。

通过 companion objectlazy 实现懒加载,首次访问是才进行初始化,lazy 默认使用 LazyThreadSafetyMode.SYNCHRONIZED,确保线程安全。

class Singleton private constructor() {companion object {val instance: Singleton by lazy {Singleton()}}
}

Java 中的懒汉模式,线程安全:

public class Singleton {private static Singleton instance;private Singleton() {}public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}}// 或者
public class Singleton {private static Singleton instance;private Singleton() { }public static Singleton getInstance() {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}return instance;}
}

2 懒汉式,双重检验锁(Double - Checked Locking)

通过 @Volatile 保证变量的可见性(对于变量的写操作会立即刷新到主内存中)和禁止指令重排序;通过同步代码块(synchronized)来确保线程安全。

实例在第一次被调用的时候才会被创建,实现了延迟初始化。

class Singleton private constructor() {companion object {@Volatileprivate var instance: Singleton? = nullfun getInstance(): Singleton {return instance ?: synchronized(this) {return instance ?: Singleton().also { instance = it }}}}
}

Java 中的双重检验锁模式:

public class Singleton {private volatile static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

3 饿汉式(Object 关键字)

像“饿汉”一样,立即进行初始化。

这是 Kotlin 中最简洁的单例实现方式,Kotlin 编译器会保证线程安全和单例的创建。单例类在类加载时就被初始化。

object Singleton {}

将其反编译成 Java 代码:

public final class Singleton {@NotNullpublic static final Singleton INSTANCE;private Singleton() {}static {Singleton var0 = new Singleton();INSTANCE = var0;}
}

Java 中的饿汉模式:

public class Singleton {private static Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}
}

4 静态内部类(Holder 模式)

静态内部类只有在使用的时候才会被加载,从而实现了延迟初始化。通过 Kotlin 的类加载机制保证线程安全。

class Singleton private constructor() {companion object {val instance: Singleton by lazy { Holder.instance }}private object Holder {val instance = Singleton()}
}

Java 中的静态内部类:

public class Singleton {private Singleton() {}public static Singleton getInstance() {return Holder.INSTANCE;}private static class Holder {private static Singleton INSTANCE = new Singleton();}
}
http://www.xdnf.cn/news/4385.html

相关文章:

  • 用R语言+随机森林玩转遥感空间预测-基于R语言机器学习遥感数据处理与模型空间预测技术及实际项目案例分析
  • 全局网络:重构数字时代的连接范式
  • 【Hive入门】Hive增量数据导入:基于Sqoop的关系型数据库同步方案深度解析
  • 汽车服务小程序功能点开发
  • 康养休闲旅游住宿服务实训室:构建产教融合新标杆
  • JVM的双亲委派模型
  • 基于RK3568多功能车载定位导航智能信息终端
  • 【IP101】图像分割技术全解析:从传统算法到深度学习的进阶之路
  • 【图书管理系统】详细讲解用户登录:后端代码实现及讲解、前端代码讲解
  • vue2开发者sass预处理注意
  • 关于STM32 SPI收发数据异常
  • 日常开发中,iOS 性能调优我们怎么做?
  • ISCC 2025练武题 WP部分
  • DELL R770 服务器,更换OCP模块!
  • (九)PMSM驱动控制学习---分流电阻采样及重构
  • 密码学系列 - SR25519与ED25519
  • chili3d调试笔记12 deepwiki viewport svg雪碧图 camera three.ts
  • JDK 发展历史及其版本特性
  • 瑞芯微RV1126开发笔记
  • NetApp SAS 连接线:铜缆与光缆的全面介绍
  • 学习alpha,第2个alpha
  • 逻辑越权--登录和支付数据篡改
  • 双强联袂登场,解锁边缘智能开发新范式 | 2025高通边缘智能创新应用大赛首场公开课重磅来袭
  • 【PD】《Research on Package Detection Algorithm Based on Convolutional》
  • huggingface 热门开源TTS模型Dia-1.6B,支持多人对话生成、情感控制~
  • 球速最快的是哪种球类运动·棒球1号位
  • Python 10天冲刺《__slots__ 是一个类级属性》用于限制和优化对象的属性存储
  • 【JS逆向基础】WEB基础
  • CAD图纸智能搜索三大突破:图纸秒搜技术、相似度匹配与AI语义搜索
  • 【每天一个知识点】使用 apriori() 函数获取频繁项集