1.使用object关键字(饿汉式)
这种方式创建的对象在第一次访问时初始化,并且是线程安全的。
object Singleton {
fun process() {
}
}
// 使用方式
Singleton.process()
2. 使用synchronized实现线程安全的单例(懒汉式)
可以在Kotlin中使用synchronized关键字来确保线程安全。
1)实现方式一
class Singleton private constructor() {
fun process() {
}
companion object {
@Volatile
private var instance: Singleton? = null
fun getInstance(): Singleton {
if(null == instance){
synchronized(this) {
if (null == instance) {
instance = Singleton()
}
}
}
return instance!!
}
}
}
// 使用方式
Singleton.getInstance().process()
2)实现方式二
class Singleton private constructor() {
fun process() {
}
companion object {
private var instance: Singleton? = null
get() {
if (field == null) {
field = Singleton()
}
return field
}
@Synchronized
fun get(): Singleton{
return instance!!
}
}
}
// 使用方式
Singleton.get().process()
3. 使用lazy代理
如果你有一个需要参数的类,或者想要延迟加载类实例,或者你想更精细地控制初始化过程,则可以使用lazy代理。此方式是线程安全的。
class Singleton private constructor() {
fun process() {
}
companion object {
val instance: Singleton by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
Singleton()
}
}
}
// 使用方式
Singleton.instance.process()
4.静态内部类式
避免类加载的时候初始化单例。
class Singleton private constructor() {
fun process() {
}
companion object {
val instance = SingletonHolder.holder
}
private object SingletonHolder {
val holder= Singleton()
}
}
// 使用方式
Singleton.instance.process()
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!