原文地址
https://mp.weixin.qq.com/s/lE9SXeG89SPFdY-fWZeEDg
本文讨论的核心问题
image.png
kotlin编译后的代码
image.png
饿汉式的线程安全原理是,jvm的初始化说线程安全的,这里的安全涉及两个
1是 有个锁
2是 重排序,这并不会被 锁住线程外的 线程看见,也就不会出现因为重排序导致的NPE
image.png
文章给了一个结论
『既然饿汉式的单例,也是在首次使用时初始化,这自然就是一种类懒加载的效果。』
问题来了,为什么推荐用 懒汉?
我的思考,
假设有个单例工具类,我只是在splashActivity那里使用单例里的一个静态常数,
而不需要使用单例的某些方法,其实就是不需要初始化单例 ,如果这个单例初始化耗时严重,这里用饿汉就显得很臃肿且拖慢splashActivity的启动。
可以使用 holder的懒汉方式写。
网友评论