单利 java_关于单利模式的几种实现方式
单例模式是java中非常常见的一种设计模式,也是java学习中很热门的一个知识模块,今天就和大家一起来了解一下单例模式和单例模式的几种实现方式。
单例模式的定义:
单例模式是指某个类只有一个实例,并且可以向整个系统提供这个可以自行实例化的实例。单例模式的特点是:只有一个实例、必须自己创建这个实例、必须给其他所有对象提供这个实例。单例模式,是为了确保全局对象的唯一性。
话不多说,接下来就看一下几种实现方式:
1、饿汉式
public classSingleton{privateSingleton(){}private static Singleton single = newSingleton();public staticSingleton getInstance(){returnsingle;
}
}
饿汉式在类初始化时就创建了一个静态对象可以被外部访问,这个对象不会被改变,所以是线程安全的;
2、懒汉式
public classSingleton{privateSingleton(){}private static Singleton single = null;public staticSingleton getInstance(){if(single == null){
single= newSingleton();
}returnsingle;
}
}
单线程环境下没有什么问题,但是在多线程时,会产生多个single对象,所以不是线程安全的;此时,我们可以通过synchronized同步锁来解决这个问题,如下:
public classSingleton{privateSingleton(){}private static Singleton single = null;public staticSingleton getInstance(){synchronized(Singleton.class){if(single == null){
single= newSingleton();
}returnsingle;
}
}
}
通过加锁,保证了只有一个实例对象,但是,带来的问题就是:效率低下,因为下一个线程如果想要获取对象,就要等待上一个线程把锁释放掉才可以继续运行;这时,可以通过双重校验锁来优化,提高效率,代码如下:
public classSingleton{privateSingleton(){}private static Singleton single = null;public staticSingleton getInstance(){if(single == null){synchronized(Singleton.class){if(single == null){
single= newSingleton();
}
}
}returnsingle;
}
}
3、静态内部类实现
public classSingleton{privateSingleton(){}private static classInnerObject(){private static Singleton single = newSingleton();
}public staticSingleton getInstance(){returnInnerObject.single;
}
}
静态内部类是线程安全的,但是,如果遇到序列化对象,那么,就是多例的了。
4、静态代码块实现
public classSingleton{privateSingleton(){}private static Singleton single = null;static{
single= newSingleton();
}public staticSingleton getInstance(){returnsingle;
}
}
5、内部枚举类实现
public classSingletonEnum(){private enumEnumSingleton{
Singleton;privateSingleton single;privateEnumSingleton(){
single= newSingleton();
}publicSingleton getInstance(){returnsingle;
}
}public staticSingleton getInstance(){returnEnumSingleton.Singleton.getInstance();
}
}classSingleton(){publicSingleton(){}
}
以上就是单例模式的几种实现方式,希望大家可以通多代码,对单例模式有一定的了解,更深入的去了解的话,还需要自己更多的努力。不管是在以后的学习还是工作中,都是有不小的用处的。
生活不易,请你努力。
单利 java_关于单利模式的几种实现方式相关推荐
- 生产者-消费者模式的三种实现方式
2.生产者-消费者模式的三种实现方式 1.背景 生产者生产数据到缓 ...
- JAVA-单例模式的几种实现方式
一.什么是单例模式 单例:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的软件设计模式之一,其目的是保证整个应用中只存在类的唯一个实例. 比如我们在系统启动时,需要加载一些 ...
- Android中夜间模式的三种实现方式
参考:https://www.jianshu.com/p/f3aaed57fa15 在本篇文章中给出了三种实现日间/夜间模式切换的方案: 使用 setTheme 的方法让 Activity 重新设置主 ...
- 生产者消费者模式的三种实现方式
原作者:老铁123 出处:https://blog.csdn.net/qewgd/article/details/85926275 本文归作者[老铁123]和博客园共有,欢迎转载,但未经作者同意必须保 ...
- chrome设置黑暗模式的4种方法
chrome设置黑暗模式的4种方法 方式一:自带皮肤暗黑 单纯设置chrome皮肤为黑暗模式,内容区域不会变黑,功能是chrome自带的,也十分容易设置. 桌面找到google chrome图标右键- ...
- ThinkPHP的访问模式分为四种模式
ThinkPHP的访问模式分为四种模式 0 普通模式 http://www.yual.com/index.php?m=user&a=show 1 pathinfo模式 http://www.y ...
- 【WPF】MVVM模式的3种command
原文:[WPF]MVVM模式的3种command 1.DelegateCommand 2.RelayCommand 3.AttachbehaviorCommand 因为MVVM模式适合于WPF和SL, ...
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式...
2019独角兽企业重金招聘Python工程师标准>>> 今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小 ...
- MVVM模式的3种command总结[2]--RelayCommand
MVVM模式的3种command总结[2]--RelayCommand RelayCommand本来是WPF下面用的一种自定义的command,主要是它用到了事件管理函数,这个SL下面是没有的.不过这 ...
最新文章
- 和12岁小同志搞创客开发:两个控制器之间如何实现通信?
- 11、MySQL常见错误代码一览表
- SpringBoot中使用thymeleaf时点击按钮触发事件失败
- 配置备份DHCP服务器(LINUX)
- MyBatis 源码自我解读
- Android SDK 快速安装方法
- axure html尺寸,Axure 原型 | 教你使用自适应视图构建界面
- java异常处理和自定义异常利用try和catch让程序继续下去(回来自己再写个例子试运行下)...
- python实现简单购物系统
- PHP 使用fpdf,fpdi类库操作修改pdf文件,添加文字和图片水印,fpdf,fpdi添加中文文字乱码问题
- 计算机联机玩游戏的操作方法,win10系统电脑联机玩罗马复兴的设置方法
- 为什么梯度反方向是函数值下降最快的方向?
- VS开发Application生硬古怪的问题及原因汇总
- 计算机毕业设计Java大学生创业众筹系统(源码+系统+mysql数据库+lw文档)
- nas文件服务器web接口,nas配置web服务器
- uni-app使用uni-forms验证遇到的问题
- 设计模式 - 六大设计原则之SRP(单一职责)
- D3D12渲染技术之编译Shader
- 图像识别AI遇上对抗性图像变“瞎子”,准确率猛降90%
- ddt数据的处理——@data(),@unpack