方式一: object实现单例(饿汉式)
object SimpleSington { fun test() {} }//在Kotlin里调用SimpleSington.test()//在Java中调用SimpleSington.INSTANCE.test();
真正的实现类似于这样:
public final class SimpleSington { public static final SimpleSington INSTANCE; private SimpleSington() { INSTANCE = (SimpleSington)this; } static { new SimpleSington(); } }
注意:
如果构造方法中存在过多的处理,会导致加载这个类时比较慢,可能引起性能问题。
如果使用饿汉式的话,只进行了类的装载,并没有实质的调用,会造成资源的浪费。
方式二: 懒汉式加载
class LazySingleton private constructor(){ companion object { val instance: LazySingleton by lazy { LazySingleton() } } }
显式声明构造方法为private
companion object用来在class内部声明一个对象
LazySingleton的实例instance 通过lazy来实现懒汉式加载
lazy默认情况下是线程安全的,这就可以避免多个线程同时访问生成多个实例的问题
选择方式
对于实例初始化花费时间较少,并且内存占用较低的话,应该使用object形式的饿汉式加载。否则使用懒汉式。
作者:kermitye
链接:https://www.jianshu.com/p/eb361ed05f54
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦