一、单例模式(单线程简单单例模式):
单例:单一个实例(Instance)。Singleton的英文意义是独身,也就是只有一个人,应用在面向对象语言上。Singleton模式可以保证一个类别 只有一个实例,并只提供一个访问这个实例的方法getInstance()。
1.饿汉式:就是一开始就初始化好了实例,getInstance()的时候直接返该实例。
package com.broada.panjie.entity;
/**
* 饿汉式单例模式
* @author panjie
*/
public class HungerSingleton {
/**
* 一开始就初始化好了实例
*/
private static HungerSingleton instance = new HungerSingleton();
private HungerSingleton(){//私有化构造器
}
public static HungerSingleton getInstance(){
return instance;
}
}
2.懒汉式:即延缓加载式(Lazy Initialization),需要的时候才创建实例。
package com.broada.panjie.entity;
/**
* 懒汉式单例模式
* @author panjie
*/
public class LazySingleton {
/**
* 一开始不先创建一个实例
*/
private static LazySingleton instance = null;
private LazySingleton(){
//私有化构造器
}
public static LazySingleton getInstance(){
if(instance==null){
instance = new LazySingleton();
}
return instance;
}
}
二、多线程单例模式
1.简单多线程单例模式:
接下来我们就会碰到多线程的单例问题,最简单的解决方法就是在getInstance()方法前加锁。
public class Singleton {
private static Singleton instance = null;
private Singleton(){}
public synchronized static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
2.双重检查单例模式(Double-check Locking):
因为加锁的同步机制会造成性能上的低效。为了顾及Singleton、Lazy Initialization与效能问题,于是又有了双重检查单例模式(Double-check Locking)。
public class Singleton {
private static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance() {
if (instance == null){
synchronized(Singleton.class){
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
分享到:
相关推荐
9--[小黑点的旅行(未完待续)].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码9--[小黑点的旅行(未完待续)].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码9--[小黑点的旅行(未完待续)].zip...
C++是一种高级编程语言,它在20世纪80年代初作为面向对象程序设计语言的代表出现,是对C语言的扩展。C++的设计思想强调了结构化程序设计和面向对象特性,包括封装性、继承性和多态性。 结构化程序设计,又称为面向...
《供热工程设计说明》 供热工程设计是一项复杂且细致的工作,它涉及到建筑物的舒适性、能源效率以及环境保护等多个方面。本文档将详细阐述某宿舍楼的楼层采暖系统的设计方案、设计依据、供暖热负荷计算、散热器的...
"android播放器未完待续"这个标题暗示我们将探讨如何在Android系统中构建一个功能完善的音乐播放器,以及可能遇到的问题和解决方案。让我们深入研究一下。 首先,Android音乐播放器的基础是媒体库服务。Android提供...
scratch2源码小黑点的旅行(未完待续)提取方式是百度网盘分享地址
EOS开发入门之cleos命令解读(未完待续)1
【标题】:“个人手机网游作品展示,未完待续” 这个标题揭示了这是一个关于个人制作的手机网络游戏的展示,暗示作者可能是一名独立游戏开发者,或者是对游戏开发有浓厚兴趣的爱好者。"未完待续"则表明这项作品还在...
在设计表单时,可能会遇到输入框之间出现不必要的空隙。 **解决办法:** - 对输入框应用`float`属性可以有效消除空隙。 #### 清除浮动 当对子元素使用`float`属性时,需要对父元素进行浮动清除,以避免布局错乱。...
教程名称:linux服务器性能调优文档(未完待续)课程目录:linux服务器性能调优01linux服务器性能调优02linux服务器性能调优03linux服务器性能调优04linux服务器性能调优05linux服务器性能调优06linux服务器性能调优07...
标题"A股市场策略周报:跨年行情,不要犹豫,未完待续.zip"揭示了这是关于中国A股市场的每周投资策略报告,重点在于跨年度的股市趋势分析。"跨年行情"指的是跨越不同年度的股市表现,通常投资者关注此阶段的市场动态...
《Web前端入门_从零开始做网站》讲义(未完待续).pdf
北京理工大学机器学习应用>超详细学习笔记和代码注释(未完待续)
北京理工大学<Python机器学习应用>超详细学习笔记和代码注释(未完待续)
根据个人.net项目开发经验,照搬了Web表示层、 BLL业务层、 SQLDAL 数据处理层,目前只完成的新闻添加功能及相关代码,其它的如列表查询,...现在贴出来希望各位朋友指教,如何在ASP项目上也较好的运用分层设计思想。
汽车行业:乘风破浪的重卡市场,高景气度未完待续-基于国三存量数据的重卡销量测算
10. 青春的延续:尽管青春已逝,但它的精神和影响却可以"未完待续",持续影响着我们的生活和决策。 总结,本文通过对青春的描绘,探讨了时间、成长、分别、记忆、诺言等主题,展现了青春的美好、脆弱和短暂,同时也...
汽车行业:乘风破浪的重卡市场,高景气度未完待续-基于国三存量数据的重卡销量测算.pdf
在大数据实战第一部分中,我们将探索大数据处理的关键概念和技术,这些技术在当今信息化社会中扮演着至关重要的角色。...通过这个未完待续的大数据实战项目,你将深入理解大数据处理的全貌,并获得宝贵的实践经验。
解决调度问题的元启发式算法应用(未完待续...),蚁群算法(ACO)、遗传算法(GA)、粒子群算法(_Scheduling-problems