之前看资料,有人根据对象的创建时间将单例的实现分为懒汉式和饿汉式:

懒汉式:

 public class Singleton {
private volatile static Singleton instance; private Singleton(){
System.out.println("Singleton has loaded");
} public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}

1 通过延迟加载,提高内存使用效率;

2 双重为空判断:第一个判断可以减少锁判断;第二个判断可以减少对象重复重复创建;

饿汉式:

 public class Singleton {
// 通过静态实现单例,但是存在创建时间过早问题
privatestatic Singleton instance = new Singleton(); private Singleton(){
System.out.println("Singleton has loaded");
} public static Singleton getInstance() {
return instance;
}
}

1 代码精简;

2 通过静态实现在类加载时就创建对象,避免了同步问题;但是也造成实例化过早,存在内存浪费;

按需饿汉式:

public class Singleton {
private Singleton(){
System.out.println("Singleton has loaded");
} public static Singleton getInstance() {
return Quote.instance;
} private static class Quote {
private static final Singleton instance = new Singleton();
}
}

1 使用内部类来创建对象,实现延迟加载;

参考资料:

  https://baijiahao.baidu.com/s?id=1604691509810750218&wfr=spider&for=pc

最新文章

  1. 关于有默认值的字段在用EF做插入操作时的思考(续)
  2. 使用webstom或者idea上传代码到github或coding
  3. append追加的使用
  4. 将在本地创建的Git仓库push到Git@OSC
  5. API Design
  6. vs常用调试快捷键
  7. java异常分类(运行时异常,可检查异常)
  8. Linux主机安全配置的几个脚本【转载】
  9. Extjs4开发中的一些问题
  10. java 懒汉式--初步解决安全问题
  11. OP(Over-provisioning)预留空间
  12. java IdentityHashMap 与HashMap
  13. 正确的IP地址正则表达式
  14. 用excel.php类库导出excel文件
  15. BLE空中升级 谈(二)
  16. C++学习-2
  17. vue基础特性
  18. Servlet之cookie处理
  19. MongoDb 集群不可用后SECONDARY节点强制启动
  20. 通过 docker 搭建自用的 gitlab 服务

热门文章

  1. .NET CORE 下 MariaDB DBfirst 生成model层 并配置连接参数
  2. 【算法】php实现排序(一)
  3. 安装jdk配置环境变量后jps command not found
  4. Python查看模块函数,查看函数方法的详细信息
  5. python之列表、元组
  6. Python爬微信好友头像,性别,所在地区
  7. Linux开机启动项总结
  8. axios封装,使用拦截器统一处理接口
  9. 一致性Hash算法(转载)
  10. Java锁--共享锁和ReentrantReadWriteLock