java单例模式 三种_三种java单例模式概述

java单例模式 三种_三种java单例模式概述在java语言的应用程序中,一个类Class只有一个实例存在,这是由java单例模式实现的。Java单例模式是一种常用的软件设计模式,java单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。下面就来介绍一下这三种java单例模式的相关内容。java单例模式是一种常见的设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例,这也是…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在java语言的应用程序中,一个类Class只有一个实例存在,这是由java单例模式实现的。Java单例模式是一种常用的软件设计模式,java单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。下面就来介绍一下这三种java单例模式的相关内容。

java单例模式是一种常见的设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例,这也是java单例模式的最主要的作用。单例模式的特点有:(1)单例类只能有一个实例;(2)单例类必须自己创建自己的唯一实例;(3)单例类必须给所有其他对象提供这一实例。

add1d480f760ca6cba7c0968c1242936.png

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

(1)java单例模式之懒汉式:单例模式的懒汉式体现了缓存的思想,延时加载就是一开始不要加载资源或者数据,一直等,等到马上就要使用这个资源的或者数据了,躲不过去了才去加载。懒汉式是定性的时间换空间,不加同步的懒汉式是线程不安全的。如何实现线程安全的懒汉式(双重检查加锁):

public class Singleton {

private volatile static Singleton instance = null;

// 私有化构造方法

private Singleton() {

}

public static Singleton getInstance() {

if (instance == null) {

synchronized (Singleton.class) {

if (instance == null) {

instance = new Singleton();

}

}

}

return instance;

}

}

793d8755042fb5403039c9c65e8bda76.png

(2)java单例模式之饿汉式:对于饿汉模式,我们可以这样理解:该单例类非常饿,迫切需要吃东西,所以它在类加载的时候就立即创建对象。

对比一下懒汉模式和饿汉模式的优缺点:懒汉模式,它的特点是运行时获得对象的速度比较慢,但加载类的时候比较快。它在整个应用的生命周期只有一部分时间在占用资源;饿汉模式,它的特点是加载类的时候比较慢,但运行时获得对象的速度比较快,它从加载到应用结束会一直占用资源。

这两种模式对于初始化较快,占用资源少的轻量级对象来说,没有多大的性能差异,选择懒汉式还是饿汉式都没有问题。但是对于初始化慢,占用资源多的重量级对象来说,就会有比较明显的差别了。所以,对重量级对象应用饿汉模式,类加载时速度慢,但运行时速度快;懒汉模式则与之相反,类加载时速度快,但运行时第一次获得对象的速度慢。

14bf3e1bcace9e894feb41c3f5633edd.png

(3)java单例模式之登记式:在需要的时候通过静态内部类去创建实例。私有静态内部类写法如下:

public class RegisterSingleton {

private RegisterSingleton() {

}

private static RegisterSingleton getInstance() {

return Holder.registerSingleton;

}

private static class Holder {

private static final RegisterSingleton registerSingleton = new RegisterSingleton()}

public static void main(String[] args) {

for (int i = 0; i < 10; i++) {

new Thread (() -> {

System.out.println(RegisterSingleton.getInstance ().hashCode ());

}

}

}

以上就是三种java单例模式的介绍,java单例模式实际中的应用,懒汉会涉及到线程的并发性问题。在实际项目开发中,使用饿汉比较多。单例设计模式是GoF中23种设计模式之一,是使用频率最高的设计模式之一,希望各位java程序员可以通过设计模式的引导,在未来的实际项目开发中逐步融入设计思想,提高自己的java编程能力,同时也使得自己的编程思想进一步升华。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160049.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python实现简单截图识别获取文字符号信息[通俗易懂]

    Python实现简单截图识别获取文字符号信息[通俗易懂]版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/weixin_42365530有时候我们百度出来一些自己需要信息后,想要直接复制粘贴(借鉴借鉴),提升工作效率,比如学校要求写什么加油稿,期末总结,思想汇报啊…额~,被请去办公室喝茶了,到时别说是博主教的啊!但是百度文库经常会限制我们复制…

    2022年5月20日
    44
  • datagrip-2022.01.4 激活码[最新免费获取]

    (datagrip-2022.01.4 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~747EFQ8BIF-eyJsaWNlbnNlSWQiOi…

    2022年3月31日
    853
  • 常用的一些vscode前端插件

    常用的一些vscode前端插件前端常用插件

    2022年7月25日
    12
  • java.lang.assertionerror_java parseint

    java.lang.assertionerror_java parseintMicrosoftVisualStudioSolutionFile,FormatVersion12.00#VisualStudio15VisualStudioVersion=15.0.26730.16MinimumVisualStudioVersion=10.0.40219.1Project(“{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC…

    2025年10月6日
    2
  • endnote的参考文献格式怎么设置成和知网一致(endnote如何替换参考文献)

    1、先偷懒吧,到EndNote的主站搜索,看是否有你要的Journal格式;如果没有只有自己学啦。2、打开一个EndNote数据库/Edit/OutputStyles/Edit………意思是将你默认的参考文献格式进行修改,因为重新编写有些语法可能不太会。技巧,先从找一个参考文献和自己要求相似的格式。如没有经验,SCI格式是缩略格式,NeuroReport是完整格式(在中国比较流行的相似格式)。我就…

    2022年4月16日
    352
  • MQTT服务器搭建与试用,桌面工具连接MQTT服务器

    MQTT服务器搭建与试用,桌面工具连接MQTT服务器简介MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽、不可靠的网络的进行远程传感器和控制设备通讯等,正在日益成为物联网通信协议的重要组成部分。MQTT现在主要用于即时通讯,物联网M2M,物联网采集等。本文就社区上常见的开源MQTT服务器在常见操作系统上的搭建做详细介绍。目前一些开源MQTT服…

    2022年5月29日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号