天天通讯!java单例模式

2023-04-04 22:08:04 来源:腾讯云

打印 放大 缩小

单例模式是一种常见的设计模式,其主要目的是确保在整个应用程序中只存在一个特定类型的对象。在Java中,单例模式是一种非常重要的设计模式,因为Java是一种面向对象的语言,它的许多库和框架都使用了单例模式。在本文中,我们将详细介绍Java单例模式的实现方式、使用场景、优点和缺点。

一、单例模式的实现方式

在Java中,有多种实现单例模式的方式,包括:

懒汉式

懒汉式是指在第一次使用时才创建对象,其实现方式有两种:


(资料图片)

1)线程不安全的懒汉式

public class Singleton {    private static Singleton instance;    private Singleton() {}    public static Singleton getInstance() {        if (instance == null) {            instance = new Singleton();        }        return instance;    }}

这种实现方式存在线程安全问题,如果多个线程同时调用getInstance()方法,可能会创建多个Singleton对象。解决方法是在getInstance()方法前加上synchronized关键字,但这会影响性能。

2)线程安全的懒汉式

javaCopy codepublic class Singleton {    private static Singleton instance;    private Singleton() {}    public static synchronized Singleton getInstance() {        if (instance == null) {            instance = new Singleton();        }        return instance;    }}

这种实现方式使用了synchronized关键字,可以保证线程安全,但会影响性能。

饿汉式

饿汉式是指在类加载时就创建对象,因此不存在线程安全问题,但可能会影响性能。

public class Singleton {    private static Singleton instance = new Singleton();    private Singleton() {}    public static Singleton getInstance() {        return instance;    }}

双重校验锁

双重校验锁是指在getInstance()方法中使用两个if语句进行判断,第一个if语句用于判断是否已经创建了对象,如果没有则使用synchronized关键字对代码块进行加锁,防止多线程同时创建对象。

public class Singleton {    private volatile static Singleton instance;    private Singleton() {}    public static Singleton getInstance() {        if (instance == null) {            synchronized (Singleton.class) {                if (instance == null) {                    instance = new Singleton();                }            }        }        return instance;    }}

静态内部类

静态内部类是指在外部类中定义一个静态内部类,在静态内部类中创建对象并返回,这种方式既保证了线程安全,又不会影响性能。

public class Singleton {    private Singleton() {}    private static class SingletonHolder {        private static final Singleton INSTANCE = new Singleton();    }    public static Singleton getInstance() {        return SingletonHolder.INSTANCE;    }}

枚举

在Java中,枚举也是一种实现单例模式的方式,因为枚举类型的实例是唯一的。使用枚举实现单例模式不仅线程安全,而且还可以防止反射攻击和序列化攻击。

public enum Singleton {    INSTANCE;    public void doSomething() {        // do something    }}

以上是单例模式的几种实现方式,在选择实现方式时需要考虑线程安全、性能、可读性和可维护性等因素。

二、单例模式的使用场景

单例模式在以下情况下特别有用:

对象需要被共享和复用

单例模式可以确保在整个应用程序中只存在一个对象实例,可以避免创建过多的对象导致内存溢出,也可以避免多个对象之间的竞争和冲突。

控制对象的创建和初始化时机

单例模式可以控制对象的创建和初始化时机,确保在需要的时候才创建对象,并在对象创建时进行必要的初始化操作。

管理共享资源

单例模式可以用于管理共享资源,例如线程池、数据库连接池、缓存等,确保在整个应用程序中只存在一个资源池实例,可以有效地管理资源。

需要频繁创建和销毁的对象

单例模式可以避免频繁创建和销毁对象,可以提高应用程序的性能和响应速度。

三、单例模式的优点

确保对象的唯一性

单例模式可以确保在整个应用程序中只存在一个特定类型的对象实例,可以避免创建多个相同的对象导致内存浪费和性能下降。

提高系统性能和响应速度

单例模式可以避免频繁创建和销毁对象,可以提高系统性能和响应速度。

方便管理和控制对象的创建和初始化

单例模式可以方便地管理和控制对象的创建和初始化,可以确保在需要的时候才创建对象,并在对象创建时进行必要的初始化操作。

简化代码实现和维护

单例模式可以简化代码实现和维护,可以将对象的创建和管理逻辑封装在一个类中,使代码更加清晰和易于维护。

四、单例模式的缺点

可能会影响性能

一些实现方式可能会影响性能,例如懒汉式的线程安全实现方式和双重校验锁。

可能会导致死锁

如果在getInstance()方法中加锁,可能会导致死锁可能会受到反射攻击和序列化攻击

一些实现方式可能会受到反射攻击和序列化攻击,例如饿汉式和懒汉式。可以通过枚举实现单例模式来解决这个问题。

不适用于大型系统

在大型系统中,单例模式可能会成为系统的瓶颈,因为在整个系统中只存在一个对象实例,可能会导致竞争和冲突。

五、单例模式的扩展

多例模式

多例模式是单例模式的扩展,它可以存在多个实例,但每个实例都有一个唯一的标识符。例如Java中的枚举类型就是一种多例模式。

延迟初始化

延迟初始化是一种在需要时才创建对象的方式,可以提高系统性能和响应速度。可以使用双重校验锁和静态内部类等方式实现延迟初始化。

容器单例

容器单例是一种在容器中管理对象实例的方式,可以将所有的单例对象存储在容器中,需要使用时再从容器中获取对象实例。可以使用Spring框架中的BeanFactory和ApplicationContext来实现容器单例。

关键词:

责任编辑:ERM523

相关阅读

精彩推送

滚动:重要新闻!央行宣布:5月15日,启动“北向互换通” 天天快看点丨陈坚:未来食品发展需围绕供给与质量开展
【世界独家】市场评论称,美国3月非农就业人数从23.6万人下修至16.5万人,这意味着数据并非超过预期,而是大幅不及预期 今日讯!世卫宣布“新决定”后,张文宏凌晨发文
A股光伏支架上市龙头企业一览(2023/5/6)|天天讯息 全国春播粮食近四成 进度快于去年 今日快讯
当前快看:绍兴数智产业园正式启动 天猫超市联合菜鸟推出的半日达服务再开七城
全国春播粮食近四成 进度快于去年|环球快资讯 文旅市场点亮夜间经济
大基金又出手!减持-每日速看 【世界新要闻】五粮液也跑不动了,普五直降400元!
“万套时代”不再,杭州二手房4月成交量环比下滑30%-世界资讯 大厂狠抓贪腐:半年打车报销20万,前置仓成了煎饼摊
全球微速讯:众多投资机构看好中国经济发展 广州:大力发展新能源汽车等战略性新兴产业
梁万年:全球抗疫取得了阶段性成果 多领域将有新变化_全球新视野 “五一”假期,重点餐饮企业销售额同比增长57.9% 餐饮业迎来强势复苏
快报:张文宏:病毒还会存在,大流行已经过去 每日简讯:梁万年:全球抗疫取得了阶段性成果,多领域将有新变化
观天下!中汽协:今年3月,我国汽车整车出口同比增长1.6倍 江苏推进老旧住宅电梯安全评估
广东印发知识产权行政保护工作实施方案 全世界关注!“投资界春晚”巴菲特股东大会来袭,中国白酒国际化步伐提速
山航退市倒计时:小股东不满国航开价,下一步博弈“老三板”? 今年以来快递业整体呈现企稳回升态势
今年以来快递业整体呈现企稳回升态势(新数据 新看点)_焦点快看 今年来快递业务量突破400亿件
环球即时:重庆一大楼穿上“花衣裳” 三角梅环绕美不胜收 给大地“做B超”,用声波找油气
南京:浦口“十里造船带”蝶变“春江十里风光带” 新消息 世界信息:中国国际自行车展览会开幕
可再生能源发展今年实现良好开局 “国际纺都”向全球广发“求贤帖”
习酒董事长张德芹率团访问郎酒庄园,汪俊林:郎酒乐见习酒发展壮大 环球微速讯:河南油田凭借过硬技术巩固扩大高端市场
一级卫国战争勋章什么材质_一级卫国战争勋章 天天观热点 环球今日报丨习酒董事长张德芹率团访问 郎酒庄园专门烹制“郎习火焰M9雪花牛肉”
江西鹰潭:制造业转型升级加力提速|全球热头条 “五一”后出游吸引白领“错峰族” 百元“白菜价”机票再现江湖
全球快播:00后“特种兵旅游”,火了! 世界观察:地产行业销售将逐步改善 中期需求仍有支撑
给大地“做B超”,用声波找油气-报道 猪企陷入亏损泥潭 卖厂、发债“苦撑”周期 世界关注
铁路“五一”假期运输期间共发送旅客1.33亿人次 焦点 天佑德青稞酒董事长李银会:不论现在还是未来,天佑德面对的竞争都非常激烈
环球头条:酒鬼酒谈一季度业绩承压:费用改革,降低了渠道端的投入 经济日报金观平:释放债市服务实体经济活力
当前播报:每片森林都有专属守护者 可再生能源发展今年实现良好开局 百事通
天天即时:世卫宣布结束新冠大流行 死亡人数接近2000万 内蒙古巴彦淖尔:河套花开引客来|天天新要闻
传统旅游胜地做优服务 世界热推荐:“五一”假期,重点餐饮企业销售额同比增长57.9%
每日资讯:联合国粮农组织发布报告显示——全球粮食危机进一步加剧 “豫”见“书·法”!|Vlog
价格“腰斩” 北京口腔种植降费落地 天天速看 甲醇市场低迷 企业利润承压
“五一档”电影业显著恢复 中腰部电影期待春天 中国联通与腾讯正式“联姻” 剑指CDN与边缘计算
立讯精密业绩逆增 苹果依赖症仍待破局 广深租赁市场升温 5月或迎来毕业租房旺季
“五一”餐饮消费生意经_世界热资讯 事关新冠 世卫最新发声
【天天快播报】红曲红是什么东西_红曲红的介绍 热文:可怜的樱花手机版下载_可怜的樱花
rco和rto原理图_RCO与RTO的区别 1.9万元!特斯拉中国两车型涨价
狂犬病能治愈吗 狂犬病能治愈|天天微速讯 追梦格林谈赛前穿格列兹曼球衣:他非常杰出,期待今夏见到他
天猫精灵和小爱同学那个更好_天猫精灵小爱同学对比 好险!产妇大出血、新生儿仅 1400 克,湖南省职防院上演“生死时速”
V观财报|中超控股:监事刘洪斌敏感期买入公司股票致歉 热讯 珠海市月坑村新时代文明实践站:老骑楼焕发新活力 | 广东新时代文明实践巡礼①-要闻速递
【天天热闻】蜜雪冰城再曝食品安全问题 加盟制之路任重道远 4月上海新房成交7093套,套均总价651万元环比降3%
豪森股份:常州基地目前已在建设中,预计在今年四季度开始陆续投产 大布夫妇在红毯上狂秀恩爱!妮可拉戴94克拉项链闪耀,比明星还美
五粮液曾从钦谈白酒行业发展趋势:存量竞争态势越发明显 天天热门 五粮液曾从钦称白酒是永恒的朝阳产业:由白酒的精神和社交双重属性天然决定
五粮液副总经理刘洋:五粮液501零售价在10万级以上 最资讯 五粮液集团总经济师:五粮液在千元价格带具有绝对领先的市场份额
环球速讯:经典五粮液市场价格不稳定?五粮液副总经理刘洋:稳定提升价格 五粮液曾从钦:优化产品结构,持续提升吨酒销售价格
五粮液曾从钦:今年将把握扩大内需的战略机遇,继续保持两位数稳健增长-全球快资讯 信息:投资者称赞燕京啤酒选蔡徐坤代言“小度酒”太明智,建议继续签约,总经理谢广军回应
五粮液副总经理:五粮液产品渠道库存量不到一个月,属于正常水平 全长约4.96公里 沧江路快速通道正式通车
不可竞争费用的含义是什么?不可竞争费用可以下浮吗为什么? 会计凭证的传递是什么意思呢?会计凭证传递的基本要求是什么?
劳务费用应该计入什么科目里面?劳务费和工资两者有何不同之处? 开办费摊销年限规定是怎么样的?开办费摊销会计分录怎么写的?
知识经济指的是什么意思?知识经济带来的有利影响有哪些方面? 五粮液曾从钦谈白酒行业发展趋势:加快向优势品牌、优势企业、优势产区集中
一天获三项青年荣誉表彰!极目新闻报道人物典型玉苏普江“火”出圈 外媒:拜登出席与微软谷歌等美国4企业CEO的会议,讨论AI风险 焦点精选
数据显示:4月我国物流业景气指数为53.8% 天天快资讯 外交部:美方看待中非合作 应“三少三多”
热推荐:北京燕京啤酒总经理谢广军:2022年度燕京啤酒中高端产品收入占比60%以上 通讯!美国前高官再现荒谬言论:中国是西方喂大的“大白鲨”