使用对象声明方式,该方式线程安全
open class MyClass {
}
object MySingleton : MyClass()
使用companion object ,通过lazy 来实现线程安全
open class MyClass {
fun hello(){
}
companion object MyCompanion{
val singleton:MyClass by lazy { MyClass() }
}
}
自己实现同步 (原理是每个类的companion object 和Class 对象一样都是唯一的)
open class MyClass {
fun hello(){
}
companion object MyCompanion{
private var singleton:MyClass? = null
fun getInstance():MyClass? {
synchronized(MyClass::class.java) {
if (null == singleton) {
singleton = MyClass()
}
}
return singleton
}
}
}