设计模式之单例模式8种实现方式,其五:懒汉式(线程不安全,同步代码块)
实现方式:
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种实现方式,其五:懒汉式(线程不安全,同步代码块)相关推荐
- 单例设计模式八种方式——5) 懒汉式(线程安全,同步代码块) 6) 双重检查 7) 静态内部类 8) 枚举
懒汉式(线程安全,同步代码块)应用实例 优缺点说明: 1) 这种方式,本意是想对第四种实现方式的改进,因为前面同步方法效率太低, 改为同步产生实例化的的代码块 2) 但是这种同步并不能起到线程同步的作 ...
- 设计模式之单例模式8种实现方式,其六:双重检查
实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化,给该静态变量添加volatile关键字,设定instance为共享变量 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在 ...
- 设计模式之单例模式8种实现方式,其八:枚举方式
实现方式: package singlePattern;enum Singleton{INSTANCE;public void method(){} } 优缺点说明: 1.这借助JDK1.5中添加的枚 ...
- 设计模式之单例模式8种实现方式,其一:饿汉式-静态常量饿汉式
实现方式分为3步骤: 1.构造方法私有化 2.类的内部创建对象 3.向外部暴露一个静态的公共方法 实例: package singlePattern;public class SinglePatter ...
- 设计模式之单例模式8种实现方式,其七:静态内部类
实现方式: 1.构造方法私有化 2.创建静态内部类 3.在静态内部类里面创建外面类的final修饰的实例 4.通过静态共有方法去返回创建的实例 代码如下: package singlePattern; ...
- 设计模式之单例模式8种实现方式,其四:懒汉式(线程安全,同步方法)
实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化 4.在外部暴露的公共方法上添加synchronized关键字 ...
- 设计模式之单例模式8种实现方式,其三:懒汉式(线程不安全)
实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化 案例: package singlePattern;publ ...
- 设计模式之单例模式8种实现方式,其二:饿汉式-静态代码块饿汉式
饿汉式(静态代码块)应用步骤: 1.构造器私有化 2.创建类的静态变量,不实例化 3.静态代码块实例化 4.向外部暴露一个静态的公共方法 案例: package singlePattern;publi ...
- java设计模式之——单例模式(八种实现)
一.介绍 有时,我们需要某个类的实例始终只有一个,举个例子,如果用面向对象语言写的操作系统,那么桌面这个实例肯定就只有一个,无论从哪个地方进入的桌面,都是同一个. 所谓类的单例设计模式,就是采取一定的 ...
最新文章
- 是否能领先e步 浅析SSD中的eTLC和eMLC颗粒
- 【LeetCode从零单排】No83 Remove Duplicates from Sorted List
- HDbaseT 高清传输更简单——只需一根网线
- linux下文件删除不了
- intelRealsense D435 python开发环境搭建
- 高级工程师究竟比你“高”在哪?
- pycharm如何上传代码到github
- 阿里P8大神十年珍藏,Java技术电子书绝佳推荐,每一本都要吃透
- 【日常小结】VB.NET下操作Access数据库
- BUU WEB [SUCTF 2019]EasyWeb
- OSI七层网络协议归纳
- 微信小程序生成跳转体验版二维码
- iOS苹果开发者账号-企业账号、公司账号和个人账号的区别
- 数据防泄密系统,你了解多少呢?
- Linux项目--多人在线聊天系统的开发
- 如何得到满意的好答案
- (区块链溯源)基于Hyperledger Fabric 的农产品区块链溯源方法
- 电脑店、大白菜PE工具去除捆绑软件的方法
- 消防报警系统服务器,消防报警系统
- 青岛新媒体运营教程:三步浅谈活动运营,拆解策划实施
热门文章
- Oracle11g数据库快速安装
- 陕西省2021年高考成绩位次查询,2021年陕西高考个人排名怎么查询,陕西高考成绩排名查询方法...
- Spring Boot学习总结(26)—— Spring Boot 容器启动详解
- Docker学习总结(55)——Google和Facebook为什么不用Docker?
- Myeclipse学习总结(10)——MyEclipse2014导入项目时The project was not built since its build问题
- python钉钉扫码登录程序_使用python+django集成钉钉三方扫码登陆
- python蛇术_小蛇学python(16)numpy高阶用法
- 拆轮子系列--RxJava理解(一)--Map解析
- laravel 扩展包
- python实现合并两个文件并打印输出