设计模式之单例模式8种实现方式,其三:懒汉式(线程不安全)
实现方式:
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种实现方式,其三:懒汉式(线程不安全)相关推荐
- 设计模式之单例模式8种实现方式,其五:懒汉式(线程不安全,同步代码块)
实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化 4.在公共方法的内部生成实例的代码块加上synchroniz ...
- 设计模式之单例模式8种实现方式,其八:枚举方式
实现方式: package singlePattern;enum Singleton{INSTANCE;public void method(){} } 优缺点说明: 1.这借助JDK1.5中添加的枚 ...
- 设计模式之单例模式8种实现方式,其六:双重检查
实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化,给该静态变量添加volatile关键字,设定instance为共享变量 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在 ...
- 设计模式之单例模式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.静态代码块实例化 4.向外部暴露一个静态的公共方法 案例: package singlePattern;publi ...
- 单例设计模式八种方式——5) 懒汉式(线程安全,同步代码块) 6) 双重检查 7) 静态内部类 8) 枚举
懒汉式(线程安全,同步代码块)应用实例 优缺点说明: 1) 这种方式,本意是想对第四种实现方式的改进,因为前面同步方法效率太低, 改为同步产生实例化的的代码块 2) 但是这种同步并不能起到线程同步的作 ...
- java设计模式之单例模式(七种方法)
单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...
最新文章
- C++实现stack【栈】
- Python解释器种类以及特点
- DotnetCharting
- go之树型结构深度理解补充
- 从编程语言排行来看:C/C++一直占有前三之位,为何C++不会消亡?
- 6. 区别值类型和引用类型。
- Angular4.X 介绍
- 观察者模式——JavaScript
- MOE 分子动力学模拟操作
- 打印收款单据(easypoi)Vue+springBoot+Mybatisplus
- java-net-php-python-jspm新开路东总布小学编程类课程教学系统计算机毕业设计程序
- linux设置display参数,Linux DISPLAY 变量设置
- 这是互联网变得越来越敌对的7种方式
- 计算机网络常见面试知识点总结
- 大学生程序设计邀请赛(华东师范大学)A
- 上网课用哪种耳机好、长时间听网课耳机推荐
- UVA:10118 Free Candies
- 计算机的应用与分类,办公自动化是计算机的一项应用,按计算机应用的分类,它属于( )...
- 距离和相似度度量方法
- 超级右键--Mac上最强的右键菜单工具
热门文章
- python分词训练_python练习17:用jieba分词做关键词提取,用matplotlib做可视化
- 在 里面_适合县城里面加盟的鞋店推荐
- mysql的orm框架_Mysql-Sqlalchemy-ORM框架
- 人才梯队的搭建:55页集团人才梯队建设方案,梯队人员的管理
- Spring Boot学习总结(27)—— Spring Boot中两个数据库迁移工具Liquibase和Flyway的比较
- Java基础学习总结(164)——别让Lombok使你的Java代码处于“亚健康”状态
- 项目管理学习总结(5)——产品开发过程中各角色职责说明和技能要求
- JavaScript学习总结(12)——2016 年 7 个顶级 JavaScript 框架
- elf 取路径_PatchELF 修改linux下elf文件library搜索路径
- python图像边缘检测_使用python获取图像中形状的轮廓(x,y)坐标