实现方式:

1.构造方法私有化

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

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

4.在公共方法的内部生成实例的代码块加上synchronized关键字(给该代码块加锁)

案例:

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

优缺点分析:

1.不能保证线程安全,具体同线程不安全那个一样,只要进入了if,后面还是会创建多个实例

2.这种方式本意是相对第四种进行改进,因为前面的同步方法的效率太低,改为同步产生实例化的代码块。

3.但是这种同步并不能起到线程同步的作用。跟第三种实现方式遇到的情形一样,假如一个线程进入了if(singleton == null)判断语句块,还未来得及往下执行,另一个线程也通过了这个判断语句,这个便会产生多个实例

4.结论:时间开发不推荐使用

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

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

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

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

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

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

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

  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.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化 案例: package singlePattern;publ ...

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

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

  9. java设计模式之——单例模式(八种实现)

    一.介绍 有时,我们需要某个类的实例始终只有一个,举个例子,如果用面向对象语言写的操作系统,那么桌面这个实例肯定就只有一个,无论从哪个地方进入的桌面,都是同一个. 所谓类的单例设计模式,就是采取一定的 ...

最新文章

  1. 是否能领先e步 浅析SSD中的eTLC和eMLC颗粒
  2. 【LeetCode从零单排】No83 Remove Duplicates from Sorted List
  3. HDbaseT 高清传输更简单——只需一根网线
  4. linux下文件删除不了
  5. intelRealsense D435 python开发环境搭建
  6. 高级工程师究竟比你“高”在哪?
  7. pycharm如何上传代码到github
  8. 阿里P8大神十年珍藏,Java技术电子书绝佳推荐,每一本都要吃透
  9. 【日常小结】VB.NET下操作Access数据库
  10. BUU WEB [SUCTF 2019]EasyWeb
  11. OSI七层网络协议归纳
  12. 微信小程序生成跳转体验版二维码
  13. iOS苹果开发者账号-企业账号、公司账号和个人账号的区别
  14. 数据防泄密系统,你了解多少呢?
  15. Linux项目--多人在线聊天系统的开发
  16. 如何得到满意的好答案
  17. (区块链溯源)基于Hyperledger Fabric 的农产品区块链溯源方法
  18. 电脑店、大白菜PE工具去除捆绑软件的方法
  19. 消防报警系统服务器,消防报警系统
  20. 青岛新媒体运营教程:三步浅谈活动运营,拆解策划实施

热门文章

  1. Oracle11g数据库快速安装
  2. 陕西省2021年高考成绩位次查询,2021年陕西高考个人排名怎么查询,陕西高考成绩排名查询方法...
  3. Spring Boot学习总结(26)—— Spring Boot 容器启动详解
  4. Docker学习总结(55)——Google和Facebook为什么不用Docker?
  5. Myeclipse学习总结(10)——MyEclipse2014导入项目时The project was not built since its build问题
  6. python钉钉扫码登录程序_使用python+django集成钉钉三方扫码登陆
  7. python蛇术_小蛇学python(16)numpy高阶用法
  8. 拆轮子系列--RxJava理解(一)--Map解析
  9. laravel 扩展包
  10. python实现合并两个文件并打印输出