Android、Java单例看这里(常用的单例模式对比)
16lz
2022-04-03
懒汉模式
public class SingleInstance{ private static SingleInstance instance; private SingleInstance(){ } public static SingleInstance getInstance(){ if(null==instance){ instance=new SingleInstance(); } return instance; }}
优点
可以延迟加载
缺点
多线程不安全
饿汉模式
public class SingleInstance{ private static SingleInstance instance=new SingleInstance(); private SingleInstance(){} public static SingleInstance getInstance(){ return instance; }}
优点
多线程安全
缺点
加载类时就初始化完成,无法延时加载
双重检查
public class SingleInstance{ private static SingleInstance instance; private SingleInstance(){ } public static SingleInstance getInstance(){ if(null==instance){ synchronized(SingleInstance.class){ if(null==instance){ instance=new SingleInstance(); } } } return instance; }}
优点
多线程安全延迟加载
缺点
同步耗时
静态内部类
public class SingleInstance{ private SingleInstance(){ } public static SingleInstance getInstance(){ return InstanceHelper.instance; } private class InstanceHelper(){ private static SingleInstance instance=new SingleInstance(); }}
优点
多线程安全延迟加载耗时短(与双重检查相比)
用缓存实现
public class SingleInstance{ private static final String KEY="instance"; private static Map map=new HaspMap<>(); private SingleInstance(){ } public static SingleInstance getInstance(){ SingleInstance instance; if(null==map.get(KEY){ instance=new SingleInstance(); map.put(KEY,instance); }else{ instance=map.get(KEY); } return instance; }}
优点
线程安全
缺点
占用内存较大
更多相关文章
- android 网络异步加载数据进度条
- Android之ViewFlipper的使用与ListView的分页加载
- Android(安卓)图片加载总结帖
- android: MapView加载多个 overlay 内存溢出
- android 保存配置文档
- 轮播网络图片加载适配
- andorid RecyclerView下拉刷新,上拉加载更多
- Android轮播图Banner使用方法
- Android标准Glide加载圆形图和圆角矩形图