使用Kotlin实现的懒汉式、饿汉式和双重检查锁单例

2025-03-11 08:42 使用Kotlin实现的懒汉式、饿汉式和双重检查锁单例已关闭评论

在Kotlin中,实现单例有多种方式,以下为你介绍几种常见的方法:

1. 饿汉式单例

饿汉式单例在类加载时就创建实例,确保实例的唯一性。这种方式简单直接,线程安全。

示例代码如下:

object Singleton {
    // 单例对象内部可以定义属性和方法
    val instance = this
    fun doSomething() {
        println("Singleton is doing something")
    }
}

使用方式:

fun main() {
    Singleton.doSomething()
}

2. 懒汉式单例(延迟初始化)

懒汉式单例在第一次使用时才创建实例,使用 by lazy 关键字实现延迟初始化。这种方式也是线程安全的。

示例代码如下:

class SingletonLazy private constructor() {
    companion object {
        val instance: SingletonLazy by lazy {
            SingletonLazy()
        }
    }
    fun doSomething() {
        println("SingletonLazy is doing something")
    }
}

使用方式:

fun main() {
    SingletonLazy.instance.doSomething()
}

3. 双重检查锁实现的单例

这种方式在多线程环境下既保证了线程安全,又提高了性能,只有在实例为空时才进行同步操作。

示例代码如下:

class SingletonDoubleCheck {
    private var instance: SingletonDoubleCheck? = null

    private constructor()

    fun getInstance(): SingletonDoubleCheck {
        if (instance == null) {
            synchronized(this) {
                if (instance == null) {
                    instance = SingletonDoubleCheck()
                }
            }
        }
        return instance as SingletonDoubleCheck
    }

    fun doSomething() {
        println("SingletonDoubleCheck is doing something")
    }
}

使用方式:

fun main() {
    val singleton = SingletonDoubleCheck().getInstance()
    singleton.doSomething()
}

这些不同的单例实现方式适用于不同的场景,可以根据具体需求选择合适的方式。例如,object 方式简单直接,适用于大多数情况;by lazy 方式适合需要延迟初始化的场景;双重检查锁方式则在需要更精细的控制和优化性能时使用。

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://teachcourse.cn/3792.html ,谢谢支持!

资源分享

Python开发后端API详细介绍 Python开发后端API详细介绍
harmony初步了解类、函数和变量的定义 harmony初步了解类、函数和变量的
MCP 协议让 AI 工具链从「玩具」变成「生产力」——我的 3 个真实集成案例 MCP 协议让 AI 工具链从「玩
Eclipse导入另一台电脑下的Android项目style文件出现错误的原因 Eclipse导入另一台电脑下的And

评论已关闭!