单例模式是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_关于单利模式的几种实现方式相关推荐

  1. 生产者-消费者模式的三种实现方式

    2.生产者-消费者模式的三种实现方式 1.背景                                                                    生产者生产数据到缓 ...

  2. JAVA-单例模式的几种实现方式

    一.什么是单例模式 单例:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的软件设计模式之一,其目的是保证整个应用中只存在类的唯一个实例. 比如我们在系统启动时,需要加载一些 ...

  3. Android中夜间模式的三种实现方式

    参考:https://www.jianshu.com/p/f3aaed57fa15 在本篇文章中给出了三种实现日间/夜间模式切换的方案: 使用 setTheme 的方法让 Activity 重新设置主 ...

  4. 生产者消费者模式的三种实现方式

    原作者:老铁123 出处:https://blog.csdn.net/qewgd/article/details/85926275 本文归作者[老铁123]和博客园共有,欢迎转载,但未经作者同意必须保 ...

  5. chrome设置黑暗模式的4种方法

    chrome设置黑暗模式的4种方法 方式一:自带皮肤暗黑 单纯设置chrome皮肤为黑暗模式,内容区域不会变黑,功能是chrome自带的,也十分容易设置. 桌面找到google chrome图标右键- ...

  6. ThinkPHP的访问模式分为四种模式

    ThinkPHP的访问模式分为四种模式 0 普通模式 http://www.yual.com/index.php?m=user&a=show 1 pathinfo模式 http://www.y ...

  7. 【WPF】MVVM模式的3种command

    原文:[WPF]MVVM模式的3种command 1.DelegateCommand 2.RelayCommand 3.AttachbehaviorCommand 因为MVVM模式适合于WPF和SL, ...

  8. kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式...

    2019独角兽企业重金招聘Python工程师标准>>> 今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小 ...

  9. MVVM模式的3种command总结[2]--RelayCommand

    MVVM模式的3种command总结[2]--RelayCommand RelayCommand本来是WPF下面用的一种自定义的command,主要是它用到了事件管理函数,这个SL下面是没有的.不过这 ...

最新文章

  1. 和12岁小同志搞创客开发:两个控制器之间如何实现通信?
  2. 11、MySQL常见错误代码一览表
  3. SpringBoot中使用thymeleaf时点击按钮触发事件失败
  4. 配置备份DHCP服务器(LINUX)
  5. MyBatis 源码自我解读
  6. Android SDK 快速安装方法
  7. axure html尺寸,Axure 原型 | 教你使用自适应视图构建界面
  8. java异常处理和自定义异常利用try和catch让程序继续下去(回来自己再写个例子试运行下)...
  9. python实现简单购物系统
  10. PHP 使用fpdf,fpdi类库操作修改pdf文件,添加文字和图片水印,fpdf,fpdi添加中文文字乱码问题
  11. 计算机联机玩游戏的操作方法,win10系统电脑联机玩罗马复兴的设置方法
  12. 为什么梯度反方向是函数值下降最快的方向?
  13. VS开发Application生硬古怪的问题及原因汇总
  14. 计算机毕业设计Java大学生创业众筹系统(源码+系统+mysql数据库+lw文档)
  15. nas文件服务器web接口,nas配置web服务器
  16. uni-app使用uni-forms验证遇到的问题
  17. 设计模式 - 六大设计原则之SRP(单一职责)
  18. D3D12渲染技术之编译Shader
  19. 图像识别AI遇上对抗性图像变“瞎子”,准确率猛降90%
  20. ddt数据的处理——@data(),@unpack

热门文章

  1. BBB通过usb联网
  2. 梅奥的人际关系理论(1933)--轉
  3. 点读机一般具备以下几大特点
  4. VirtualLab基础实验教程-1.杨氏双缝干涉
  5. 【单元复习】之标日初级上册第一,二单元
  6. 3-4 页面路由参数的传递
  7. vue---网页全屏
  8. SOLIDWORKS软件 实用小技巧汇总篇
  9. Excel截取字符串:从指定第N个分隔符处截取
  10. 12个帮助实现超棒数据可视化效果的Javascript框架