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是线程安全的,也就实现了多线程的校验功能。

相关推荐
222you21 分钟前
Java线程的三种创建方式
java·开发语言
云上漫步者27 分钟前
深度实战:Rust交叉编译适配OpenHarmony PC——unicode_width完整适配案例
开发语言·后端·rust·harmonyos
漫漫求31 分钟前
Java内存模型【JMM】、JVM内存模型
java·开发语言·jvm
田姐姐tmner37 分钟前
Python 全面语法指南
开发语言·python
white-persist1 小时前
【攻防世界】reverse | simple-check-100 详细题解 WP
c语言·开发语言·汇编·数据结构·c++·python·算法
wuguan_1 小时前
C#中的静态成员、常量和只读变量
开发语言·c#
张人玉1 小时前
C# 与西门子 PLC 通信:地址相关核心知识点
开发语言·microsoft·c#·plc
Gomiko1 小时前
JavaScript DOM 原生部分(五):事件绑定
开发语言·前端·javascript
lly2024061 小时前
Redis 发布订阅
开发语言
A0_張張1 小时前
记录一个PDF盖章工具(PyQt5 + PyMuPDF)
开发语言·python·qt·pdf