单例模式之懒汉式/饿汉式/结合二者之优的模式
单例模式主要用来产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。
两个好处:
- 对于频繁使用的对象,可以省略new操作花费的时间
- new的次数少了,对系统内存的使用频率就小了,那么GC压力就会降低,缩短了GC停顿时间
饿汉式单例模式:
public class Singleton {private Singleton() {System.out.println("Singleton iscreate");}private static Singleton instance = new Singleton();private static Singleton getInstance() {return instance;} }
私有化构造方法的作用:不能new这个类的实例,从而避免该类被错误的创建
因此要想获取这个对象,只能调用getInstance()工厂方法,构造方法被私有化,要想这个方法可以被调用,所以这个方法必须用static修饰,调用方式:类.方法名
从而instance也必须用static修饰。
好处:性能非常好,getInstance()方法只是简单的返回instance,并没有任何锁操作,所以在并行程序中它会有很好的表现
坏处:Singleton构造函数或者说Singleton实例在什么时候创建是不受控制的,对于静态成员instance,它会在类第一次初始化的时候被创建,并不是第一次调用getInstance()方法的时候被创建的
延伸一点:static修饰的成员变量所属类被加载的时候,变量间会被分配空间,及就会被创建
懒汉式单例模式:
public class LazySingleton {private LazySingleton() {System.out.println("LazySingleton is create");}private static LazySingleton instance = null;private static synchronized LazySingleton getInstance() {if (instance == null)instance = new LazySingleton();return instance;} }
私有化构造方法的作用:不能new这个类的实例,从而避免该类被错误的创建
只有当调用getInstance()方法时才会创建单例对象,为了防止对象被多次创建,还须要使用synchronized进行方法同步
好处:充分利用了延迟加载,只有在真正需要时才会创建对象
坏处:并发环境下加锁,竞争激烈的场合对性能会产生一定影响
另外还有一种,双重判断加双同步(安全又高效):
public class SingleTon {private static volatile SingleTon singleTon = null;private SingleTon() {}public static SingleTon getInstance() {if (singleTon == null) {synchronized (SingleTon.class) {if (singleTon == null) {singleTon = new SingleTon();}}}return singleTon;} }
转载于:https://www.cnblogs.com/java-spring/p/9075670.html
单例模式之懒汉式/饿汉式/结合二者之优的模式相关推荐
- 单例模式:懒汉式 饿汉式 双检锁 登记式 枚举式 详细讲解
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创建自己的对 ...
- Java单例模式【懒汉式饿汉式】
目录 一. 单例模式的解释 二. 实现方法 2.1 饿汉式 2.1.1饿汉式的实现代码 2.2 懒汉式 2.2.1懒汉式的实现代码 三. 单例设计模式的好处 3.1单例模式的应用场景 一. 单例模式的 ...
- 单例模式【懒汉式+饿汉式+枚举】
软件设计模式(Software Design Pattern) 又称设计模式,是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.它描述了在软件设计过程中的一些不断重复发生的问题,以及 ...
- Spring框架学习day_01: 框架配置方式/ 管理对象的作用域/ 生命周期/ 组件扫描/ 单例模式:“懒汉式“,“饿汉式“
1. Spring框架的作用 Spring框架的主要作用是创建对象和管理对象. 创建对象:类似于User user = new User(); 管理对象:随时可以通过Spring框架获取对象,甚至Sp ...
- Singleton模式(单例模式) 饿汉式和懒汉式
目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例. 好比一个国家就只有一个皇帝(XXX),此时每个人叫的"皇帝"都是指叫的XXX本人; 常见单例模式类型: ...
- 单例模式饿汉式/懒汉式的区别
単例设计模式(Singleton Pattern): 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法. 如果我们要 ...
- 【无标题】单例模式的两种创建方式:饿汉式和懒汉式
这里写自定义目录标题 单例模式的两种创建方式:饿汉式和懒汉式 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂 ...
- 单例模式中懒汉式和饿汉式的区别区别在哪?
一.单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.所谓单例就是在系统中只有一个该类的实例,或者说 ...
- 饿汉式单例模式与懒汉式单例模式
饿汉式单例模式 GiantDragon 应该只有一只,通过私有化其构造方法,使得外部无法通过new 得到新的实例. GiantDragon 提供了一个public static的getInstance ...
最新文章
- mysql 5.5 1366错误_laravel5.3 在 mysql5.1中运行出错 error: 1366 Incorrect integer
- Docker应用五:使用Dockerfile部署MongoDB
- c语言水仙桃树编程,辰颐物语编辑部整理:春季适合种植哪些花卉品种?樱花和桃花怎么区分?...
- 路由器用到坏才换?路由器你在乎哪些功能?
- 【AIX】AIX 开机自动挂载NFS共享
- IE下table的innerHTML无效的处理方法
- python百度贴吧怎么爬取最早的帖子_Python爬虫爬取百度贴吧的帖子
- xftp传输文件报错
- PAT-求特殊方程的正整数解(简单编程题)
- 目标检测经典论文——YOLOv1论文翻译(纯中文版):YOLO:统一的实时目标检测
- 如何登录虚拟主机服务器,如何登录虚拟主机服务器
- 一亿用户背后架构的秘密
- 上电瞬间电容相当于短路
- 栈的应用之中缀表达式转后缀
- 交换机-链路冗余、链路聚合、堆叠、热备、虚拟化
- 版权保护利用区块链是否可以体现优势?
- 手电筒充放电管理芯片SM5401兼容HT4892 超低静态电流 低成本充放电管理芯片 移动电源芯片
- 【杂谈】杠精的葵花宝典
- 华科考研计算机专业课,华科计算机考研专业课有哪些
- 2022年七夕礼物推荐!好看便宜又实用的礼物推荐
热门文章
- c++服务器开源项目,开源一个c++ lua服务器框架
- linux分区 挂盘,linux分区与格式化磁盘挂载磁盘与自动挂载详细教程
- php yii2 finfo file,FileHelper:文件系统助手
- matlab中nsamp,matlab用于数字调制,几个函数的使用问题
- 高性能MySQL数据库(含二级考试)-张晨光-专题视频课程
- 干货|各种WAF绕过手法学习
- 记录mysql中的隐患特性
- freemarker迭代list、map等常规操作
- Python输入多行多组数据两个两求和
- sklearn综合示例5:多分类分类器