实现方式:

1.构造方法私有化

2.创建类的静态变量,不实例化

3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化

案例:

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

优缺点分析:

1.起到了Lazy Loading效果,但是只能在单线程下使用

2.如果在多线程下,一个线程进入if(instance == null)判断语句块,还未来得及往下执行, 另一个线程也通过了这个判断语句,这时便会产生多个实例。所以在多线程环境下不可使用这种方式

3.结论:在实际开发中,不要使用这种方式。

设计模式之单例模式8种实现方式,其三:懒汉式(线程不安全)相关推荐

  1. 设计模式之单例模式8种实现方式,其五:懒汉式(线程不安全,同步代码块)

    实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化 4.在公共方法的内部生成实例的代码块加上synchroniz ...

  2. 设计模式之单例模式8种实现方式,其八:枚举方式

    实现方式: package singlePattern;enum Singleton{INSTANCE;public void method(){} } 优缺点说明: 1.这借助JDK1.5中添加的枚 ...

  3. 设计模式之单例模式8种实现方式,其六:双重检查

    实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化,给该静态变量添加volatile关键字,设定instance为共享变量 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在 ...

  4. 设计模式之单例模式8种实现方式,其一:饿汉式-静态常量饿汉式

    实现方式分为3步骤: 1.构造方法私有化 2.类的内部创建对象 3.向外部暴露一个静态的公共方法 实例: package singlePattern;public class SinglePatter ...

  5. 设计模式之单例模式8种实现方式,其七:静态内部类

    实现方式: 1.构造方法私有化 2.创建静态内部类 3.在静态内部类里面创建外面类的final修饰的实例 4.通过静态共有方法去返回创建的实例 代码如下: package singlePattern; ...

  6. 设计模式之单例模式8种实现方式,其四:懒汉式(线程安全,同步方法)

    实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化 4.在外部暴露的公共方法上添加synchronized关键字 ...

  7. 设计模式之单例模式8种实现方式,其二:饿汉式-静态代码块饿汉式

    饿汉式(静态代码块)应用步骤: 1.构造器私有化 2.创建类的静态变量,不实例化 3.静态代码块实例化 4.向外部暴露一个静态的公共方法 案例: package singlePattern;publi ...

  8. 单例设计模式八种方式——5) 懒汉式(线程安全,同步代码块) 6) 双重检查 7) 静态内部类 8) 枚举

    懒汉式(线程安全,同步代码块)应用实例 优缺点说明: 1) 这种方式,本意是想对第四种实现方式的改进,因为前面同步方法效率太低, 改为同步产生实例化的的代码块 2) 但是这种同步并不能起到线程同步的作 ...

  9. java设计模式之单例模式(七种方法)

    单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...

最新文章

  1. C++实现stack【栈】
  2. Python解释器种类以及特点
  3. DotnetCharting
  4. go之树型结构深度理解补充
  5. 从编程语言排行来看:C/C++一直占有前三之位,为何C++不会消亡?
  6. 6. 区别值类型和引用类型。
  7. Angular4.X 介绍
  8. 观察者模式——JavaScript
  9. MOE 分子动力学模拟操作
  10. 打印收款单据(easypoi)Vue+springBoot+Mybatisplus
  11. java-net-php-python-jspm新开路东总布小学编程类课程教学系统计算机毕业设计程序
  12. linux设置display参数,Linux DISPLAY 变量设置
  13. 这是互联网变得越来越敌对的7种方式
  14. 计算机网络常见面试知识点总结
  15. 大学生程序设计邀请赛(华东师范大学)A
  16. 上网课用哪种耳机好、长时间听网课耳机推荐
  17. UVA:10118 Free Candies
  18. 计算机的应用与分类,办公自动化是计算机的一项应用,按计算机应用的分类,它属于(    )...
  19. 距离和相似度度量方法
  20. 超级右键--Mac上最强的右键菜单工具

热门文章

  1. python分词训练_python练习17:用jieba分词做关键词提取,用matplotlib做可视化
  2. 在 里面_适合县城里面加盟的鞋店推荐
  3. mysql的orm框架_Mysql-Sqlalchemy-ORM框架
  4. 人才梯队的搭建:55页集团人才梯队建设方案,梯队人员的管理
  5. Spring Boot学习总结(27)—— Spring Boot中两个数据库迁移工具Liquibase和Flyway的比较
  6. Java基础学习总结(164)——别让Lombok使你的Java代码处于“亚健康”状态
  7. 项目管理学习总结(5)——产品开发过程中各角色职责说明和技能要求
  8. JavaScript学习总结(12)——2016 年 7 个顶级 JavaScript 框架
  9. elf 取路径_PatchELF 修改linux下elf文件library搜索路径
  10. python图像边缘检测_使用python获取图像中形状的轮廓(x,y)坐标