- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java设计模式之单例模式(实现、应用的详细总结)--第1页
Java设计模式之单例模式(实现、应⽤的详细总结)
⽬录
⼀、单例模式简介
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之⼀。这种设计模式属于创建型模式,它提供了⼀种创建对象的最佳⽅
式。单例模式类负责创建⾃⼰的对象,同时确保只有单个对象被创建。这个类提供了⼀种访问其唯⼀的对象的⽅式,可以直接访问,不需要
实例化该类的对象。
1.单例模式的定义
单例模式确保某⼀个类只有⼀个实例,⽽且⾃⾏实例化并向整个系统提供这个实例的访问⽅法。在计算机系统中,线程池、缓存、⽇志
对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应⽤都或多或少具有资源管理器的功能。每台计算机可以有若⼲个打印
机,但只能有⼀个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若⼲通信端⼝,系统应当集中管理这些
通信端⼝,以避免⼀个通信端⼝同时被两个请求调⽤。总之,选择单例模式就是为了避免不⼀致状态。
2.单例模式的要素
(1)单例类只能有⼀个实例
需要私有其构造⽅法,确保其他⼈不能创建该单例对象的新实例。
(2)单例类必须⾃⼰创建唯⼀实例
需要在单例类中创建单例对象。
(3)单例类必须给其他对象提供该实例⼀个全局的访问⽅法
需要将实例对象声明为私有,并提供⼀个公共的public访问⽅法返回该实例。
⼆、单例模式的简单实现⽅式
1.饿汉式
饿汉式(也称为⽴即加载⽅式)是在单例类加载初始化时,就创建单例对象供外部使⽤。除⾮系统重启,否则这个对象不会改变,所以饿
汉式天⽣就是线程安全的。
//饿汉式
public class Singleton{
//私有构造⽅法
private Singleton(){}
//创建并私有实例
private static Singleton instance = new Singleton();
// 提供公共的全局的获取⽅式
public static Singleton getInstance(){
return instance;
}
}
2.懒汉式
懒汉式(也称为延迟加载⽅式),它在第⼀次获取单例对象时创建该单例对象,避免不使⽤时浪费资源。
Java设计模式之单例模式(实现、应用的详细总结)--第1页
Java设计模式之单例模式(实现、应用的详细总结)--第2页
//懒汉式
public class Singleton{
private Singleton(){}
private Singleton instance = null;
public static Singleton getInstance(){
if(instance == null){
// 第⼀次使⽤时创建
instance = new Singleton();
}
return instance;
}
}
三、线程安全的懒汉式单例模式
在多线程的环境下,使⽤上述的懒汉式延迟加载,可能会产⽣多个单例对象。某⼀时刻,有线程A、B执⾏到第6⾏处,此时线程A执⾏
if语句,检查出单例对象为null,并在准备执⾏第8⾏代码时,被切换出去让出CPU的使⽤权。接着线程B掌握了CPU的使⽤权,但是单例
象还未创建,因此线程B也将执⾏第8⾏代码创建到单例对象。导致创建多个单例对象。接下来介绍⼏种多线程安全的单例实现⽅式。
1.同步锁⽅式
懒汉式创建⽅式在获取⽅法判空时会出现多线程安全问题,因此可以为该段代码加上同步锁,使得同⼀时刻只能有⼀个线程判断单例对象
是否为null,并创建单例对象。
public class Singleton {
private Singleton() {}
private static Singleton instance = null;
public static Singleton getInstance() {
// 等同于public static synch
您可能关注的文档
- 2023年中级经济师之中级经济师经济基础知识高分题库附精品答案.pdf
- 2023届高考历年真题英语阅读理解的50个重要词汇.pdf
- 《婚姻家庭法》习题集(附答案).pdf
- 2020年河南公务员考试面试真题汇总.pdf
- 2022~2023医疗卫生系统人员考试题库及答案解析第133期.pdf
- 2022年广西民族大学辅导员招聘考试真题及答案.pdf
- 2023年建筑特殊工种建筑焊工模拟考试题库试卷一(100题,含答案).pdf
- 2023年社会工作者之中级社会综合能力模考预测题库(夺冠系列).pdf
- 2022-2023年医学影像技术期末复习-药理学(本科医学影像技术)考试全真模拟全知识点汇编押题第六.pdf
- 2022年生产经营单位安全生产知识竞赛题库及答案(共九套).pdf
- 山东聊城市文轩中学2026届数学八年级第一学期期末统考试题含解析.doc
- 安徽省芜湖市繁昌县2026届八年级数学第一学期期末预测试题含解析.doc
- 辽宁省锦州市凌海市2026届九年级数学第一学期期末调研模拟试题含解析.doc
- 江苏省泰州市姜堰区2026届八年级数学第一学期期末考试模拟试题含解析.doc
- 2026届广西桂林市灌阳县数学九上期末经典试题含解析.doc
- 安徽省马鞍山市2026届数学八上期末达标检测模拟试题含解析.doc
- 山南市重点中学2026届数学八年级第一学期期末学业水平测试模拟试题含解析.doc
- 种子预约生产合同协议书(精选).doc
- 石材买卖(合同)与石材买卖(合同)范本.doc
- 六、劳动合同书(16页版本).doc
原创力文档


文档评论(0)