java单例模式 观天下
单例模式是一种常见的设计模式,其主要目的是确保在整个应用程序中只存在一个特定类型的对象。在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来实现容器单例。
标签:
-
2022-09-15 14:23:06
杨莉娜租借加盟巴黎圣日耳曼 与姆巴佩梅西拉莫斯一起共事<
北京时间9月13日下午,法甲女足俱乐部巴黎圣日耳曼正式官宣中国女足国脚杨莉娜完成租借加盟,合同期至2023年6月。杨莉娜成为目前国家队中第
-
2022-02-07 14:57:45
奇迹!绝杀!女足亚洲杯逆转夺冠!<
刚刚,中国女足上演逆转绝杀奇迹!她们在亚洲杯决赛中3:2力克韩国队,时隔16年再夺亚洲杯冠军!
-
2022-02-07 14:57:45
中国政府与阿根廷共和国政府签署共建“一带一路”谅解备忘录<
新华社北京2月6日电(记者安蓓)国家发展改革委6日称,国家发展改革委主任何立峰与阿根廷外交、国际贸易和宗教事
-
2022-02-07 14:57:43
中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明(全文)<
新华社北京2月6日电中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明一、应中方邀请,阿根廷
-
2022-02-07 14:57:40
春节假期国内旅游出游2.51亿人次<
春节遇冬奥,旅游年味浓。根据文化和旅游部数据中心测算,2022年春节假期7天,全国国内旅游出游2 51亿人次,同比
-
2023-04-06 05:24:28
java单例模式 观天下
单例模式是一种常见的设计模式,其主要目的是确保在整个应用程序中只存在一个特定类型的对象。在Java中,单例模式是一种非常重要的设计模式,
-
2023-04-06 00:46:11
清炖鸡块做法大全_清炖鸡块做法
1、 清炖鸡块的做法相信大部分厨房达人都是会好几种,不过出入厨房的新朋友就需要再多多的学习几种,尝试一些不同的清炖鸡块
-
2023-04-05 21:28:08
王哲林61分连刷纪录:历史第二人全场高呼MVP 垃圾时间在场引争议 每日精选
北京时间4月5日,整场比赛,王哲林37投26中,狂轰61分14篮板3盖帽,连刷纪录,生涯第二座常规赛MVP看起来没跑了。第四节还剩6分50秒,王哲林补
-
2023-04-05 19:59:33
东契奇:放眼整个NBA历史,比我强的分卫只有5人!
东契奇这个赛季的表现非常不错,他的得分数据排名第二,仅落后恩比德0 2分,是一个很有希望冲击这个赛季得分之王的位置,他在常规赛中出场328
-
2023-04-05 18:10:33
福建省福清市龙田派出所开展春季治安重点问题整治
民主与法制网讯(记者陈镇国□刘清华通讯员陈宇婷)近日,福建省福清市公安局龙田派出所深入推进春季治安重点问题整治,坚持深学争优、敢为争
-
2023-04-05 16:23:07
重点聚焦!金智科技(002090.SZ)下属公司合计中标8654.94万元智慧城市业务相关项目
智通财经APP讯,金智科技(002090)(002090 SZ)公告,公司全资子公司江苏东大金智信息系统有限公司(简称“金智信息”)中标南京市智能泛在感知体系重
-
2023-04-05 15:09:43
每日速递:(曜梨)霜雾笼罩之季与你相拥 Chapter 9
“怪类。”“真是恶心。”“离我们远点啊。”“别靠近她,你就不怕被她盯上吗?”“真可怕真可怕。”“我怎么会养出你这样的孩子?”“不要...
-
2023-04-05 13:17:21
本学期不少于4个课时,江汉区中小学生都能上人工智能课
长江日报大武汉客户端4月5日讯人工智能课有多好玩?智慧校园是什么样子?4月4日,长江日报记者从江汉区教育局获悉,目前江汉全区中小学都建设
-
2023-04-05 11:48:22
观焦点:车牌戴手套,司机手里还牵着绳!北京交警:计10分
北京日报客户端|记者安然货车驶入禁行路段,为躲避电子眼,司机下了一番功夫,用废弃的旧车灯遮挡后牌,前号牌套上手套,并用绳子连接进了驾驶
-
2023-04-05 10:05:16
天天最新:宏华数科:4月4日融资买入387.98万元,融资融券余额3.01亿元
4月4日,宏华数科(688789)融资买入387 98万元,融资偿还826 39万元,融资净卖出438 41万元,融资余额5777 16万元。
-
2023-04-05 09:09:56
中宏网赴四川兴川贷座谈交流 全球资讯
中宏网4月4日电3月30日,中宏网一行赴四川兴川贷数字科技有限公司(以下简称“兴川贷”)座谈交流,深入了解兴川贷发展情况。兴川贷主要负...
-
2023-04-05 07:13:01
全球短讯!广州从化荔枝贵阳推介 今年预计产量达7万吨
羊城晚报讯记者马灿、通讯员蔡根款报道:4月4日,广州市从化区在贵州省贵阳市举办专场荔枝推介会。今年,从化全区荔枝将再次迎来丰收,预计产
-
2023-04-05 05:27:25
天天日报丨北约总部升起芬兰国旗,欧洲大陆“历史性重组”?
中新网4月4日电综合外媒报道,当地时间4日,芬兰国旗在北约总部布鲁塞尔缓缓升起。由此,这个北欧国家正式成为北大西洋公约
-
2023-04-05 01:41:40
红豆简谱王菲视频_红豆简谱王菲 天天微资讯
1、你是不是没有装什么图片处理软件?我给你2个方法:一是放在WORD里。2、需要你截图插入分成几页。3、以便调整好比例;
-
2023-04-04 22:13:23
farmtogether修改器风灵月影_farm together
1、可以通过收集黄金矿石进入铁匠铺进行熔炼后获得。以上就是【farmtogether修改器风灵月影,farmtoget
-
2023-04-04 21:11:00
供需仍不平衡 奥司他韦最高网售价是医院价2倍
供需仍不平衡奥司他韦最高网售价是医院价2倍
-
2023-04-04 19:45:07
Apple正在修复iOS错误 使孩子们可以轻松绕过屏幕时间通信限制
最近Apple正在修复iOS错误使孩子们可以轻松绕过屏幕时间通信限制这个话题,相信很多小伙伴都是非常有兴趣了解的吧,一
-
2023-04-04 18:40:20
3月盘点:值得关注的成都资本市场动态 速看
3月,成都在资本市场方面取得较大进展,出现了多起值得关注的事件,资本市场活力不断增强。其中,成都炭材、天科航空以及赛康智
-
2023-04-04 17:51:47
云南青基会“洱海保护基金”成立
云南希望工程首个洱海环境保护公益基金——云南青基会“洱海保护基金”在大理成立。当日,12家爱心企业为基金注入首笔捐款97 9432万元,“...
-
2023-04-04 17:03:58
【2023年二季报】镍:新增产能释放,消费乏善可陈,镍价迈向合理估值|世界观天下
从产业供需来看,今年一季度原生镍总量供大于需:国内镍铁供需维持过剩状态;前期纯镍供应紧张的局面也得到了有效改善,一方面是由于国内部分
-
2023-04-04 15:59:07
浙江浦江:“防骗普法宣传”小课堂提高群众反诈“免疫力” 环球实时
民主与法制网讯(记者傅潇潇□傅荣辉通讯员杨晨茜)近日,浙江省浦江县公安局城东派出所积极组织民警进社区、进企业、进学校、进家庭,紧盯重
-
2023-04-04 15:05:04
朝阳区酒仙桥街道推进垃圾分类与文明祭扫主题宣传
在清明节即将来临之际,为树立文明祭祀新风尚,保护生态环境,4月3日,朝阳区酒仙桥街道联合大山子社区和三方万家广厦工作人员
-
2023-04-04 14:04:09
天天微资讯!这位缅甸陆军上尉有一个愿望:在缅甸开设一间中医诊所
植根于中国优秀传统文化的现代化■缅甸陆军上尉漂敏丹现代化与传统文化不是对立的,这是我学习中医后的最大感受。第一次接触中
-
2023-04-04 14:15:55
中秋节的传说和风俗有哪些_中秋节习俗的传说-全球今亮点
1、中秋习俗的传说朱元璋与月饼起义:中秋节吃月饼相传始于元代。2、当时,中原广大人民不堪忍受元朝统治阶级的残酷统治,纷纷
-
2023-04-04 13:05:05
世界微资讯!中信出版:四季度亏损主要是由于受到外部环境对实体店的持续影响,公司在第四季度主动关闭了包括中店信集在内的多家实体店项目,由此产生了撤店损失
同花顺金融研究中心4月4日讯,有投资者向中信出版提问,看到第四季度净利润我足足十分钟说不出话来。第四季度居然亏损1000余万,不知道贵公司
-
2023-04-04 12:14:18
保定小额贷款与银行贷款有何不同?
随着社会经济的发展,人们对于资金的需求越来越多,而贷款成为了一种重要的资金来源。在保定地区,小额贷款和银行贷款是两种常见
-
2023-04-04 11:23:05
期待!东川泥石流汽车越野赛4月28日开赛
期待!东川泥石流汽车越野赛4月28日开赛
-
2023-04-04 10:37:01
【天天快播报】湖北省团风县人武部开展清明祭奠英烈暨教育实践活动
为缅怀革命先烈,扎实开展“学习强军思想、建功强军事业”教育实践活动,清明节期间,湖北省团风县人武部开展清明祭奠英烈暨“学习强军思想...
-
2023-04-04 09:58:53
热门看点:探索“滑板底盘”造车商业化之路
日前,悠跑科技发布了我国首个可量产全线控滑板底盘。同时,悠跑科技公布两大业务进展:悠跑首个整车产品超级VAN将于年底启动交付,已获得国内
-
2023-04-04 09:03:47
4月4日新股提示:旺成科技等申购 国泰环保等上市 当前观点
4月4日新股提示:旺成科技等申购国泰环保等上市,上市,新股,证券,股据,交易所,旺成科技,国泰环保,主板注册制