Kotlin中的同步单例

时间:2019-06-30 13:11:33

标签: android kotlin singleton synchronized

我是Kotlin的新手。仍在学习基本语法。 我听说过与Java中的static类似的伴随对象。但是不知道如何在Kotlin中创建同步单例。

4 个答案:

答案 0 :(得分:6)

只需使用

object Singleton {
    // any members you need
}

它已经正确同步:

  

Object declaration's initialization is thread-safe.

请注意,这不能保证对其进行线程安全的调用,但这与Java中的情况一样。

答案 1 :(得分:1)

还有其他方法,但是这两种方法是生成单例类的最简单方法

方法1-Kotlin方式

object SingletonObj {
    init {
        // do your initialization stuff
    }
}

方法2:在Kotlin中使用双Null检查方式

class SingletonObj {
    private constructor(context: Context)

    companion object {
        @Volatile private var mInstance: SingletonObj? = null

        public  fun get(context: Context): SingletonObj =
            mInstance ?: synchronized(this) {
                val newInstance = mInstance ?: SingletonObj(context).also { mInstance = it }
                newInstance
            }
    }
}

答案 2 :(得分:0)

我认为,更多的研究发现了。这是怎么做的。如果可以采取更好的方法,请纠正我。

companion object {
@Volatile private var INSTANCE: Singleton ? = null
 fun  getInstance(): Singleton {
         if(INSTANCE == null){
             synchronized(this) {
                 INSTANCE = Singleton()
             }
         }
         return INSTANCE!!
   }
}

答案 3 :(得分:0)

线程安全且懒惰:

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

已在 by lazy 中实现了双空检查。