Java设计模式-单例模式(二)单例模式类

java设计模式之单例模式——Singleton pattern 设计模式故事会:https://blog.youkuaiyun.com/weixin_40205234/article/details/90664824 单例模式 单例模式(Singleton pattern)是java中最常见的设计模式之一。该模式属于创建型设计模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一... 阅读详情

饿汉式单例类

饿汉式单例类在加载时单例对象已经被创建。代码如下:

/**
 * 懒汉式单例
 * @Author: Rick
 * @Date: 2018/10/31 17:44
 */
public class EagerSingleton {
    private static EagerSingleton eagerSingleton = new EagerSingleton();

    private EagerSingleton(){};

    public static EagerSingleton getEagerSingleton(){
        return eagerSingleton;
    }
}

懒汉式单例类

与饿汉式单例不一样的是,懒汉式单例在第一次创建时被实例化。

使用关键字synchronized,使用线程锁,实现单例模式,代码如下:

**
 * 懒汉式单例
 * @Author: Rick
 * @Date: 2018/10/31 17:51
 */
public class LazySingleton {
    private static LazySingleton lazySingleton = null;

    private LazySingleton(){

    }
    //增加了线程锁,线程安全,但是增加了系统压力,使性能降低
   synchronized public static LazySingleton getLazySingleton() {
        if (lazySingleton == null) {
            lazySingleton = new LazySingleton();
        }
        return lazySingleton;
    }
    
}

在类上添加关键字synchronized,进行单例实现,得到了线程安全,但每次都要进行线程锁的判断,在多线程高并发的访问环境中,导致系统的性能大大降低。getLazySingleton()方法修改为:

public static LazySingleton getLazySingleton(){
        if(lazySingleton == null){
            synchronized (LazySingleton.class){
                lazySingleton = new LazySingleton();
            }
        }
        return lazySingleton;
    }

问题:这种方式不能实现单例,在第一个请求到达时,会创建对象,如果此时有第二个调用该方法,就会在线程锁外等待,当第一个请求创建对象完成后,第二个请求处于等待的状态,会再创建一个对象,所以这种写法无法实现单例。
使用双重检查锁定实现懒汉式的单例类的完整代码如下:

public static LazySingleton getLazySingleton(){
        if(lazySingleton == null){
            synchronized (LazySingleton.class){
                if(lazySingleton == null) {
                    lazySingleton = new LazySingleton();
                }
            }
        }
        return lazySingleton;
    }

静态内部类单例

饿汉式单例不能实现延迟加载,不论将来使用与否都会占用内存;懒汉式单例类线程安全控制繁琐,影响系统性能。可见无论是哪个都存在一些问题。使用静态内部类来实现单例,可以解决以上问题,代码如下:

/**
 * 内部类实现单例
 * @Author: Rick
 * @Date: 2018/10/31 18:25
 */
public class InternalSingleton {
    private InternalSingleton(){
    }

    private static class HolderClass{
        /**内部类中进行实例化*/
        private final static  InternalSingleton INTERNALSINGLETON = new InternalSingleton();
    }

    public static InternalSingleton getHolderClass() {
        return HolderClass.INTERNALSINGLETON;
    }

    public static void main(String[] args) {
        InternalSingleton internalSingleton1,internalSingleton2;
        internalSingleton1 = InternalSingleton.getHolderClass();
        internalSingleton2 = InternalSingleton.getHolderClass();

        System.out.println(internalSingleton1 == internalSingleton2);

    }
}

GNSS/RTK定位失效时的替代方案:视觉惯性里程计(VIO) GNSS/RTK定位失效时的替代方案:视觉惯性里程计(VIO)​ ,人工智能,计算机视觉,大模型,AI,本文详细介绍了视觉惯性里程计(VIO)作为GNSS/RTK定位失效时的替代方案。阐述了VIO的定义、优势及与其他定位技术的区别,讲解了视觉传感器和IMU的工作原理及数据融合原理,分析了时间同步、标定等关键技术,介绍了VINS-Mono等常用框架、简单代码示例、应用场景,还探讨了VIO面临的挑战与未来发展趋势,展现了其在多个领域的重要性与应用潜力。 阅读详情

相关推荐

TSMaster如何用珠海创芯CAN卡实现高效CAN通信(附完整驱动安装指南)

本文详细介绍了如何使用TSMaster软件与珠海创芯CAN卡实现高效CAN通信,包括驱动安装、系统配置、ControlCAN.dll替换及TSMaster集成配置等关键步骤。通过实战指南和故障排除技巧,帮助工程师快速搭建稳定可靠的CAN通信测试环境,适用于汽车电子和工业控制等领域。

weixin_29201859的博客 481

java单例模式

这种方式使用静态内部类来保存单例实例,当外部类被加载时,静态内部类不会被加载,只有调用getInstance()方法时才会加载静态内部类,从而实现懒加载的效果。这种方式使用静态内部类来保存单例实例,当外部类被加载时,静态内部类不会被加载,只有调用getInstance()方法时才会加载静态内部类,从而实现懒加载的效果。这种方式使用一个私有的静态变量来保存单例实例,通过getInstance()方法来获取单例实例,如果instance为空,则创建一个实例并返回。

wswssx的专栏 109

U8+ 新建账套

一、登录 账套主管:demo 对账套有修改权限,有账套库权限 系统管理员:admin 其他所有权限 二、新建账套 admin登录–>点击系统管理–>账套–>建立 选择了参照已有账套结转期初:就是上一个的期末数据作为这一次新表的期初数据 启用会计期一旦选择更改不了。 ...

茶茶很困i 3694

对Java单例模式 volatile关键字作用的理解

  单例模式是程序设计中经常用到的,简单便捷的设计模式,也是很多程序猿对设计模式入门的第一节课。其中最经典的一种写法是: class Singleton { private volatile static Singleton instance;//volatile关键字防止指令重排 private Singleton(){} public static Sing...

weixin_33829657的博客 261

Halcon工业相机开发全流程:从SDK配置到实时图像采集(C++版)

本文详细介绍了使用C++进行Halcon工业相机开发的完整流程,从SDK配置到实时图像采集的实现。涵盖环境搭建、设备初始化、回调机制、参数控制等关键环节,并提供异常处理和实战案例,帮助开发者快速掌握工业视觉系统的开发技巧。

weixin_33728268的博客 513

别再只看成交量了!用通达信这个VOL监测公式,一眼识别主力吸筹与出货信号

本文详细介绍了通达信VOL监测公式的实战应用,通过彩色量柱和换手率分层技术,帮助投资者识别主力吸筹与出货信号。该公式结合动态量能标准化和多周期均线组合,提供可视化主力行为图谱,提升交易决策的准确性。

weixin_28693447的博客 662

JAVA设计模式——单例模式八种方式

目录 单例模式简介: 应用场景: 单例设计模式的八种方式: 1、饿汉式(静态常量) 2、饿汉式(静态代码块) 3、懒汉式(线程不安全) 4、懒汉式(线程安全,同步方法) 5、懒汉式(线程安全,同步代码块) 6、双重检查(推荐使用) 7、静态内部类(推荐使用) 8、枚举(推荐使用) 单例模式在JDK应用的源码分析 单例模式注意事项和细节说明 单例模式简介: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供

龍弟-idea的博客 7110

实战:如何用MIPI CSI-2高效传输RAW10图像数据(附带宽优化技巧)

本文深入探讨了MIPI CSI-2协议在RAW10图像数据传输中的高效应用,详细解析了4像素5字节打包机制及其带宽优化技巧。通过动态Lane分配、位深度自适应压缩和虚拟通道交错传输等实战方法,显著提升传输效率,适用于IoT摄像头开发等低功耗场景。

css33的专栏 732

设计模式之单例模式

本文主要介绍了设计模式的相关内容,包括设计模式的概念、常见设计模式及 GoF 设计模式的分类。重点阐述了单例模式,从其核心思想、实现方式展开,如通过对比非单例的 `Student` 类实例化结果,引出单例模式。详细介绍了饿汉式、懒汉式(线程不安全)、线程安全的懒汉式、双重检查锁、静态内部类和枚举等多种单例模式的实现方式,以代码示例及测试展示特点,分析了各实现方式的优缺点,如直接在方法上加锁的线程安全懒汉式会因频繁加锁致并发性能差,以及对性能的优化目标,还提及单例模式的应用场景及优缺点,并在最后对单例模式进行

m0_73941339的博客 1767

No Target Connected 错误时的一种情况

STM32的SWD烧录模式No Target Connected 错误的一种情况 STM32的SWD烧录模式No Target Connected 错误时的一种处理情况 这是我第一次烧板子的时候遇到的问题,在给板子download的时候出现了“No Target Connected”的错误,这里讲一种解决方法。不一定适用于全部状况,但是可以作为一种纠错方法。 打开 Options for Target… 1.首先点击Options for Target…这个像魔棒一样的按键打开,会出现这个页面 2.点击

Logan_CodeGou的博客 1万+

【学习系列】SAP RAP 20:Unmanaged场景开发示例-调用BAPI、BAPI包装类、BO接口创建标准采购订单

本文介绍了在SAP RAP(Restful ABAP Programming)框架下,通过三种方式实现采购订单创建的方案。首先分析了RAP框架对传统BAPI调用的限制,特别是禁止显式COMMIT语句的要求。随后详细阐述了三种实现方式:1)直接调用传统BAPI(仅支持OP环境);2)使用BAPI包装类(仅支持OP环境);3)调用标准业务对象接口(支持所有环境)。 文章重点说明了在unmanaged场景下的技术实现细节,包括字段控制、缓冲区管理、测试运行与实际调用的分离处理等。针对每种方式都提供了完整的实施步骤

DeveloperMrMeng的博客 599

Java设计模式——单例模式

介绍Java设计模式的八种单例模式

m0_62946761的博客 7270

2025年下半年网络工程师案例分析真题及答案解析

2025年下半年网络工程师案例分析真题及答案解析

鹿鸣天涯 1090

【Java设计模式】二、单例模式

没有重写readResolve方法时,会通过反射创建一个新的对象,从而破坏了单例模式。IF 这一行,被挂起,再被唤醒时继续往下执行,就会创建出两个不同的实例对象。通过流将单例对象,序列化到文件中,然后再反序列化读取出来。发现通过反序列化方式创建出来的对象内存地址,和原对象不一样,单例模式被破坏。如此,再有A、B两个线程同时执行到第一个IF,只能有一个成功创建对象,另一个获取到锁后,第二重判断会告诉它已经有对象实例了。静态内部类在被加载时,不会立即实例化,而是在第一次使用时才会被加载并初始化。

llg___的博客 1367

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java 设计模式 - 单例模式

Java 设计模式 - 单例模式 作者: 霍英俊 [huo920@live.com] 文章目录Java 设计模式 - 单例模式单例设计模式介绍单例设计模式八种方式饿汉式 - 静态常量饿汉式(静态常量)应用实例优缺点说明饿汉式 - 静态代码块饿汉式(静态代码块)应用实例优缺点说明懒汉式 - 线程不安全懒汉式线程不安全应用实例优缺点说明懒汉式 - 线程安全,同步方法懒汉式线程安全,同步方法应用实例优缺点说明懒汉式 - 线程安全,同步代码块懒汉式 线程安全,同步代码块应用实例优缺点说明懒汉式 - 双重检查 - 推

霍英俊 1736

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

图解 java 设计模式(二)——彻底弄明白单例模式,工厂模式

1、图解 java 设计模式(二)——彻底弄明白单例模式,工厂模式 1.1、前言 大家可以去 b 站观看韩老师的视频:b站韩老师视频链接 1.2、设计模式介绍 1.2.1、基本介绍 设计模式是程序员在面对同类软件设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案,设计模式(Design Pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的时间的试验和错误总结出来的。 设计模式的本质提高 软件的维护性,通用性和扩展性,并降低软件的复杂度。 设计模式的本质提高 软

qq_42279295的博客 4526

设计模式实战教程:基于 youngyangyang04/DesignPattern 开源项目

设计模式实战教程:基于 youngyangyang04/DesignPattern 开源项目 本教程旨在全面介绍位于 GitHub 的设计模式开源项目。通过深入浅出的讲解,我们将涵盖项目的核心要素,提供快速上手指南,展示经典应用场景,以及探索其在技术生态中的位置。 1. 项目介绍 设计模式 是软件开发中的一套成熟解决方案,用于解决常见的设计问题并促进代码的可重用性、可维护性和扩展性。此开源项目 D...

gitblog_00568的博客 1057

【Java设计模式 01】单例模式

synchronized代码块使用一个对象作为锁,当一个线程进入synchronized代码块时,会尝试获取该对象的锁,如果锁被其他线程占用,则该线程被阻塞,直到锁被释放。当更新或删除数据时,如果没有及时同步所有的缓存实例,可能导致数据的不一致性,从而引发潜在的问题。在Java中,每个类都对应一个Class对象,该对象包含了有关类的结构、字段、方法等信息,可以在程序运行时通过反射机制来访问和操作类的成员。(即,在整个应用程序中,只存在该类的一个实例对象,而不是创建多个相同类型的对象),并提供。

weixin_55252589的博客 1231

Java 设计模式 二 单例模式 (Singleton Pattern)

单例模式是一种非常常见且有用的设计模式,能够确保类只有一个实例,并且提供全局访问点。在 Java 中,推荐使用静态内部类单例模式和枚举单例模式,这两种方式在性能、线程安全性和代码简洁性上都非常优秀。

空 1307

Java设计模式-创建型设计模式-单例模式

Java设计模式-创建型设计模式-单例模式

Fatter$hday的博客 1150

Java设计模式:(二)单例模式

Java设计模式:单例模式 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。 意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决: 一个全局使用的类频繁地创建与销毁。 单例模式实现步骤: 1.一个类只有一个实例 如果要做到只有一个实例那么该的的构造方法不能是public的,是private的。因为该类的构造方法如果是publi...

Lian_Easel的博客 267

【Java设计模式】创建型设计模式-单例模式(二)

单例模式适用于需要频繁创建和销毁且消耗时间较长,耗费资源过多,但又是频繁使用的对象(重量级对象)。例如:工具类对象、web开发中的必须用到的对象(servlet对象)、用于操作数据库和文件的对象(数据源对象、session工厂对象等)

古采尼的博客 865

Java单例模式(设计模式之单例模式)

1.设计模式之终极结合 最近几期博客打算主要讲一下单例模式、观察者模式、Build模式,目的是为了方便后期为大家带来RXJava+Retrofit2.0+Okhttp3结合使用的网络请求框架。 2.单例模式介绍 单例模式是我们使用的最娴熟的模式之一,也是我们App开发者必须会的模式之一。单例模式顾名思义就是在一个App/Project中一个单例对象类只存在一个实例。比如我们一个App中是不是...

IBM_Forever 1253

[Java单例模式篇] 单例设计模式的9种实现

手写单例设计模式 写在前面 我们常见的设计模式有模板方法模式、工厂模式、适配器模式、代理模式、装饰者模式、观察者模式、单例模式等,单例设计模式可以说是做简单的设计模式,本篇文章将专门针对单例设计模式进行分析实现,做到手写单例,不心慌。 有的时候我们只需要某个类只有一个对象产生,不需要更多的实例对象,那么,我们就可以考虑用单例设计模式来实现此需求。 一、单例模式的特点 (1) 一个类只允许产...

SolarL的博客 1148

Java设计模式—单例模式精讲

相信学习Java的同学们对设计模式这个概念并不陌生,不管是在学习还是在求职面试的过程中我相信大家都或多或少接触过设计模式这个字眼。不知道大家在学习SSM(Springboot-Spring-Mybatis)框架的时候会不会存在疑问,咱们一个服务至少由三部分组成,即控制层到服务层,最后就是咱们的数据层。咱们创建这些业务对象使用的是Spring的控制反转,将跟项目相关的类通过反射的方式加入到IOC容器。像咱们Controller层、Service层都很好理解,我们只需要在Spring的核心配置文件扫描对应的类,

zjjcchina的博客 268

Java设计模式之容器单例模式

Java设计模式之容器单例模式 public class ContainerSingleton { private ContainerSingleton(){} private static Map<String , Object> map=new HashMap<>(); public static void putInstance(Str...

Crook的专栏 1755
上一篇: Java设计模式-单例模式(一)单例模式实现
下一篇: 端口占用解决方法
James_JR10
博客等级 码龄9年 20粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值