单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。即一个类只有一个对象实例。

目录

第一种(懒汉模式,线程不安全)

第二种(懒汉模式,线程安全)

第三种(饿汉模式)

第四种(饿汉模式,变种)

第五种(静态内部类)

第六种(枚举)

第七种(双重校验锁)


第一种(懒汉模式,线程不安全)

public class SingletonDemo1 {private static SingletonDemo1 instance;private SingletonDemo1(){}public static SingletonDemo1 getInstance(){if (instance == null) {instance = new SingletonDemo1();}return instance;}
}

第二种(懒汉模式,线程安全)

public class SingletonDemo2 {private static SingletonDemo2 instance;private SingletonDemo2(){}public static synchronized SingletonDemo2 getInstance(){if (instance == null) {instance = new SingletonDemo2();}return instance;}
}

第三种(饿汉模式)

public class SingletonDemo3 {private static SingletonDemo3 instance = new SingletonDemo3();private SingletonDemo3(){}public static SingletonDemo3 getInstance(){return instance;}
}

第四种(饿汉模式,变种)

public class SingletonDemo4 {private static SingletonDemo4 instance = null;static{instance = new SingletonDemo4();}private SingletonDemo4(){}public static SingletonDemo4 getInstance(){return instance;}
}

第五种(静态内部类)

public class SingletonDemo5 {private static class SingletonHolder{private static final SingletonDemo5 instance = new SingletonDemo5();}private SingletonDemo5(){}public static final SingletonDemo5 getInsatance(){return SingletonHolder.instance;}
}

第六种(枚举)

public class SingletonDemo6 {private SingletonDemo6() {}public static SingletonDemo6 getInstance() {return Singleton.INSTANCE.getInstance();}private static enum Singleton {INSTANCE;private SingletonDemo6 singleton;private Singleton() {singleton = new SingletonDemo6();}public SingletonDemo6 getInstance() {return singleton;}}
}

第七种(双重校验锁)

public class SingletonDemo7 {private volatile static SingletonDemo7 singletonDemo7;private SingletonDemo7(){}public static SingletonDemo7 getSingletonDemo7(){if (singletonDemo7 == null) {synchronized (SingletonDemo7.class) {if (singletonDemo7 == null) {singletonDemo7 = new SingletonDemo7();}}}return singletonDemo7;}
}

单例模式几种不同实现方式?相关推荐

  1. Python代码篇-单例模式(五种实现单利方式)

    (一).如何反序的迭代一个序列? # 如果是一个list,最来的解决方案是tempList = [1,2,3,4] tempList.reverse() for x in tempList:print ...

  2. java单例模式几种常见实现方式

    什么是单例模式 因进程需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 单例模式的特点 1.单例模式只能有一个实例. 2.单例类必须创建自己的唯一实例 ...

  3. 单例模式,自定义cell加长版,对控件的圆润度设置还有另一种跳界面方式(很多界面)

    今天师兄回来教了我们很多东西,包括帮我巩固的单例模式,自定义cell的那种lol盒子的cell加长版,对控件的圆润度设置还有另一种跳界面方式. 1.单例模式:在.h的文件里面设置 1.@propert ...

  4. unity单例模式两种_Unity和GameAnalytics合作起来! Roadhouse Interactive通过两种工具分享他们的经验

    unity单例模式两种 Exciting news! GameAnalytics and Unity Technologies have partnered up to bring developer ...

  5. Pytorch两种模型保存方式

    以字典方式保存,更容易解析和可视化 Pytorch两种模型保存方式 大黑_7e1b关注 2019.02.12 17:49:35字数 13阅读 5,907 只保存模型参数 # 保存 torch.save ...

  6. Linux+Qt 下同一数据空间vfork多进程间通信的一种高效便捷方式(信号槽直接调用)

    Linux+Qt 下同一数据空间vfork多进程间通信的一种高效便捷方式(信号槽直接调用) 概述 传统的多进程间通信往往非常麻烦,采用的方法比如管道,共享内存,socket,文件等,大都非常繁琐, 1 ...

  7. MyBatis 三种批量插入方式的比较,我推荐第3个!

    欢迎关注方志朋的博客,回复"666"获面试宝典 数据库使用的是SQLServer,JDK版本1.8,运行在SpringBoot环境下 对比3种可用的方式 反复执行单条插入语句 xm ...

  8. Spring Boot 五种热部署方式,极速开发就是生产力!

    欢迎关注方志朋的博客,回复"666"获面试宝典 模板热部署 在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的, ...

  9. 阿里原来是这么干的!Spring Boot 五种热部署方式

    作者:若离x 来源:my.oschina.net/ruoli/blog/1590148 1.模板热部署 在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面 ...

最新文章

  1. 全栈工程师的学习笔记与工作记录
  2. iphone html5直播,【小技巧】解决iPhone中video视频的行内播放
  3. 数据库-优化-pt-kill-授权-数据
  4. 佳博热敏条码打印机修改ip_高赋码热转印打印和热敏打印区别
  5. android调用python框架_在Java中从Android应用程序执行Python脚本?
  6. mysql自带压测工具--mysqlslap
  7. Unity3D--枚举+协程控制定点移动
  8. PAT-乙级-1035 插入与归并
  9. 小程序会话服务器,完美解决小程序session问题
  10. 7-4 谁会留下?规则如下:所有的学生绕成一圈,顺序排号,从第一个学生开始报数,凡是报到固定数字(例如 5)的都退出,直到只剩下一位学生游戏才中止。 (10 分)
  11. 如何去掉CAD教育版打印戳记
  12. 网络视频传输的服务质量(QoS)
  13. 6688常见问题FAQ
  14. 计算机远程用户关机指令,有哪些远程关机命令?如何用向日葵进行远程关机电脑?...
  15. python——【1】gzip压缩文件
  16. Elasticsearch可视化工具-----cerebro(比head更优秀)
  17. OR | IE | SCM | TR: 国际会议集锦
  18. 真彩色图像数据量 计算_计算机基础:图形、图像相关知识笔记
  19. oh-my-zsh配置 alias 指定指令别名
  20. 数据库视图的基本操作(sql语句)

热门文章

  1. Pycharm报错解决:error:please select a valid Python interpreter 及一些基本设置
  2. hdu 5710 Digit-Sum (构造题)
  3. 语法糖----C#的async和await
  4. 测试计划与测试方案的区别
  5. 自定义 Web 服务器控件
  6. MVC3和MVC4内置Razor引擎的差异
  7. linq 学习日记-select
  8. StreamingAssets文件夹的读取异常
  9. VS2013模块对于SAFESEH映像是不安全的解决方法
  10. 基于知识图谱的推荐系统总结