kotlin实现单例模式

kotlin实现单例模式,大体分为两种方式,一种饿汉式单例模式,一种懒汉式单例模式。
1.饿汉式单例模式

在类前面加上object关键字,就实现了饿汉式单例模式:

kotlin 复制代码
object singletonDemo {
}

在kotlin中,使用这种方式基本就能应对大部分的情况。而且这种方式在类加载的时候初始化,还是线程安全的。
补充说明一下:

类加载的时机,或者说类的初始化(两者是类加载到内存中达到可用状态的两个阶段),包括:创建类的实例对象,或者类的静态成员访问,类的反射,父类中的子类初始化的时候,虚拟机特定类。所以并不是程序初始化的时候就会加载所有的类,声明一个类型的变量时也不会加载该类,而是真的使用该类的时候才会去加载。
2.懒汉式单例模式

kotlin中实现双重锁校验的懒汉式单例模式也很简单:

kotlin 复制代码
class SingletonDemo private constructor() {
	companion object {
		val instance: SingletonDemo by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
			SingletonDemo()
		}
	}
}

通过伴生对象实现类似于static的静态变量,同时通过by lazy,实现了属性委托,延迟初始化,即在使用instance属性字段的时候,才会去初始化。同时,由于by lazy是线程安全的,也就实现了多线程的校验功能。

相关推荐
lie..6 分钟前
30天从零开始学AI应用开发(Day 19):项目二完结:RAG 知识库问答系统,把自己攒的资料变成私人顾问
开发语言·人工智能·python
SWAGGY..10 分钟前
【C++进阶】:(7)红黑树的原理与 C++ 实现:结构设计、插入调整及性质验证
android·java·开发语言·c++·算法
Android打工仔13 分钟前
CoroutineScheduler 设计解析(上)—— 为什么 Dispatchers.IO 会创建更多线程?
android·kotlin·源码阅读
(Charon)18 分钟前
【C++面试】堆内存与栈内存:string、vector和对象到底存在哪里
开发语言·c++·面试
谢亮_vipxieliang27 分钟前
Go defer、panic与recover核心知识点
开发语言·后端·golang
迪康Defender40 分钟前
终端安全事后追溯能力解析:本地审计模块设计思路与落地实践
运维·开发语言·人工智能·安全·php·安全威胁分析·运维开发
yujunl43 分钟前
开发一个可以用APIFOX来调试的接口
开发语言
苏辰澈1 小时前
C++自己的族谱规则:继承详解下
c语言·开发语言·c++·visualstudio
hunter1990101 小时前
英语作文题目
开发语言
谢亮_vipxieliang1 小时前
Go基础数据类型全解
开发语言·后端·golang