Java中设计模式之单例设计模式-1
单例作用
- 1 节省内存
- 2 可以避免多种状态导致状态冲突
单例的创建步骤
- 1 私有化构造方法
- 2 私有化声明的属性
- 3 getInstance
- 4 方法需要静态
单例分类
1.懒汉式
2.饿汉式
两种单例区别:
饿汉式 线程安全的
懒汉式 线程不安全的
饿汉式:
package 设计模式之单例;
//饿汉式:
public class HungeryMode {private final static HungeryMode INSTANCE=new HungeryMode();public static HungeryMode getInstance() {return INSTANCE;}private HungeryMode(){}}
懒汉式:
package 设计模式之单例;public class LazyMode {private static LazyMode instance=null;public static LazyMode getInstance() {if(instance==null){instance=new LazyMode();}return instance;}private LazyMode(){}
}
测试:
package 设计模式之单例;public class Test1 {public static void main(String[] args){//饿汉式 HungeryMode instance=HungeryMode.getInstance();HungeryMode instance2=HungeryMode.getInstance();System.out.println("instance="+instance);System.out.println("instance2="+instance2);// 懒汉式LazyMode instance3=LazyMode.getInstance();LazyMode instance4=LazyMode.getInstance();LazyMode instance5=LazyMode.getInstance();System.out.println("instance3="+instance3+","+instance3.hashCode());System.out.println("instance4="+instance4+","+instance4.hashCode());System.out.println("instance5="+instance5+","+instance5.hashCode());}
}
测试结果:
创建多个对象,测试内存地址,如果相同说明创建的是同一个对象,说明创建的是单例!
延伸—————————–懒汉式线程安全性处理————————–
懒汉式线程不安全原因:
在多线程中,创建单例时,可能出现多个线程进入if(instance==null)执行语句中,在一个线程创建了一个instance后,其他进入执行语句的线程也会接着创建,这样就会产生多个对象,实现不了单例了,此时不安全了。
代码:
package 设计模式之单例;public class LazyMode2 {private static LazyMode2 instance=null;private LazyMode2(){}public static LazyMode2 getInstance(){// 双重检查if(instance==null){// 为了提高效率 尽可能少的让线程反复判断锁synchronized (LazyMode2.class) {// 静态方法中 不能使用this 就可以用 本类.class 来代替if(instance==null){instance=new LazyMode2();}}}return instance;}
}
Java中设计模式之单例设计模式-1相关推荐
- 对于java程序语言的单例设计模式讲解
1.设计模式:解决某一类问题最行之有效的方法.(java中有23种通用设计模式) 单例设计模式:解决一个类在内存中只存在一个对象. 2.单例设计模式有两种方式: 1)饿汉式 先初始化对象.当类一进内存 ...
- java饿汉式有啥作用,Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?...
什么是单例设计模式? 单例设计模式就是一种控制实例化对象个数的设计模式. 为什么要使用单例设计模式? 使用单例设计模式可以节省内存空间,提高性能.因为很多情况下,有些类是不需要重复产生对象的.如果重复 ...
- 单例设计模式java,浅谈Java编程中的单例设计模式
写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你分析数据.但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至像f ...
- Java面试题 实现单例设计模式(懒汉、饿汉)
懒汉: //懒汉,顾名思义比较懒,在用的时候才实例化 public class Singleton {//创建实例,注意,此时没有newprivate static volatile Singleto ...
- 【设计模式】创建者模式(单例工厂原型建造者)
文章目录 1.单例设计模式 1.1 单例模式概述 1.2 单例模式的实现 1.2.1 饿汉式(静态变量方式) 1.2.2 饿汉式(静态代码块方式) 1.2.3 懒汉式(线程不安全) 1.2.4 懒汉式 ...
- java实现一个单例设计模式_Java正确实现一个单例设计模式的示例
Java正确实现一个单例设计模式的示例 发布于 2021-1-12| 复制链接 分享一篇关于关于Java正确实现一个单例设计模式的示例,小妖觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的 ...
- 高频面试题2:单例设计模式
Singleton:在java中即指单例设计模式,某个类在整个系统中只能有一个实例对象可被获取和使用的代码模式.jvm中的runtime类. 1,只能有一个实例(构造器私有化) 2,必须自行创建这个实 ...
- 什么是Singleton,单例设计模式
Singleton [ˈsɪŋɡltən] 单例模式 在java中是指单例设计模式. 单例设计模式: 单例模式可以保证系统中,应用该模式的类一个类只有一个实例.即一个类只有一个对象实例. 例如:例如 ...
- Java面试题:单例设计模式、适配器模式的不同方式
QUESTION:单例设计模式.适配器模式的不同方式? ANSWER: 1.单例设计模式,适配器设计模式 单利设计模式: 在java中,单例模式是指为了保证类在内存中只 ...
最新文章
- 大学python用什么教材-python大学里用哪本教材比较好?
- 网络编程2_网络通讯协议, socket(tcp, udp)
- deletion in request load scenario
- HDU odd-even number 数位dp
- 读取Apache访问日志,查看每一个独立客户端连接获得的字节数
- 我的MYSQL学习心得(九) 索引
- ES6 数组函数forEach()、map()、filter()、find()、every()、some()、reduce()
- 树莓派4使用CSI摄像头
- 深度沉浸能力的锻炼方法
- 一般学校计算机密码是什么,学校电脑密码忘了怎么解?
- matalb读取txt文件以及将数据写入txt文件
- table中 点击某一行变色
- Python个人主页项目-3.个人数据后端管理应用开发
- 实时互动下视频 QoE 端到端轻量化网络建模
- 一文带你彻底弄懂ES中的doc_values和fielddata
- 8个Spring事务失效的场景,你碰到过几种?
- angular五大服务顺序_双11五折特惠!49.9元抢贵安欢乐世界夜场活动票,五大惊魂大咖点、网红项目女巫塔罗牌占卜,游荡鬼巡游,鬼妆派对~...
- SimulateIDFA,新一代iOS设备的广告追踪解决方案
- FISCO BCOS 2.0原理解析: 分布式存储架构设计
- 修改服务器超时时间,服务器超时时间设置