单例模式笔记

批量读取_MCGS触摸屏如何实现批量读取modbus数据的方法? 前两天,在一个QQ群里,有同行的朋友问,在MCGS中如何实现批量读取数据,因为他当时面临设备,通讯协议才是MODBUS RTU,同时厂家说地址不能分开读,必须是连续的。鉴于他提供的消息是能够设置的地方都试过了。为此,我直接告诉通过脚本,批量读取的方案。那么这个方案究竟如何实现?且看我下面慢慢道来。一、工具1.modsim:仿真PLC或者第三方设备。2.MCGS组态软件3.串口软件:在电脑中生成两不... 阅读详情

单例模式

前言

单例模式是指:确保一个类在任何情况下都绝对只有一个实例,隐藏其构造的方法,并提供一个全局访问点

例如ServletContext、ServletConfig、ApplicationContext、DBPool

你能记起多少单例?

饿汉式,饱汉式,双重检查式,静态内部类式

饿汉式

缺点:当需要加载的单例对象数量过多时,会造成内存浪费

==注:==如果是变成static代码块去new也是没有本质区别的——因为都是一开始就初始化了,不过至少可以放上对应的初始化的操作,还是比原生的要好一点点的

/**
 * @Author if
 * @Description: 饿汉式单例:先创建好了,随时可以等着使用
 * 线程安全,效率高,但是不能延迟加载
 * @Date 2021-09-20 下午 08:19
 */
public class DanLiDemo01 {
    private static DanLiDemo01 instance=new DanLiDemo01();
	private DanLiDemo01() {}
    public static DanLiDemo01 getInstance() {
        return instance;
    }
}

饱汉式

/**
 * @Author if
 * @Description: 饱汉式单例:等待调用,调用里判断是否存在,不存在就创建
 * 线程安全,效率较低,每次需要判断,且为了安全性需要加同步锁
 * 但尽管这样做到了线程安全,并且解决了多实例问题,但并不高效
 * 所以我们为此添加一个优化类————双重检查单例
 * @Date 2021-09-20 下午 08:22
 */
public class DanLiDemo02 {
    private static DanLiDemo02 instance=null;
    private DanLiDemo02() {}
    public synchronized static  DanLiDemo02 getInstance(){
        if(instance==null){
            instance=new DanLiDemo02();
        }
        return instance;
    }
}

双重检查式

参考链接

/**
 * @Author if
 * @Description: 双重检查单例
 * @Date 2021-09-20 下午 08:45
 */
public class DanLiDemo04 {
    /**
     * 在早期的JVM中,synchronized(甚至是无竞争的synchronized)存在着巨大性能开销。
     * 因此,出现双重检查锁定。以下是示例代码。
     * 将饱汉式优化为如下的双重检查类(此方法有问题)
     *
     * 如上面的代码所示,如果第一次检查instance不为null,那就不需要执行下面的加锁和初始化操作。
     * 因此,可以大幅降低synchronized带来的性能开销。
     * 这样似乎很完美,但这是一个错误的优化!
     * 在线程执行到第3行,代码读取到instance不为null时,instance引用的对象可能还没有完成初始化。
     */
    private static DanLiDemo04 instance;
   
    public  static DanLiDemo04 getInstance(){
        if(instance ==null) {
            synchronized (DanLiDemo04.class) {
                if (instance == null) {
                    instance = new DanLiDemo04();
                }
            }
        }
        return instance;
    }

    private static void doSomething(){

    }
    /**
     * 那如何进行优化呢?
     * 首先,先看一段代码
     * 这段代码是很典型的一段代码,很多人在中断线程时可能都会采用这种标记办法
     * 每个线程在运行过程中都有自己的工作内存,那么线程1在运行的时候
     * 所以线程1会将stop变量的值拷贝一份放在自己的工作内存当中
     * 那么当线程2更改了stop变量的值之后,但是还没来得及写入主存当中,线程2转去做其他事情了
     * 那么线程1由于不知道线程2对stop变量的更改,因此还会一直循环下去
     *
     * 但是用volatile修饰之后就变得不一样了
     * 1.使用volatile关键字会强制将修改的值立即写入主存
     * 2.使用volatile关键字的话,当线程2进行修改时,会导致线程1的工作内存中缓存变量stop的缓存行无效
     * (反映到硬件层的话,就是CPU的L1或者L2缓存中对应的缓存行无效)
     * 3.由于线程1的工作内存中缓存变量stop的缓存行无效,所以线程1再次读取变量stop的值时会去主存读取
     * 即线程2修改了stop的值后,线程1读取不到缓存的值,会需要去主存读取,此时stop为true,线程1停止
     */
    public static void main(String[] args) {
        //线程1
        boolean stop = false;
        while(!stop){
            doSomething();
        }
        //线程2
        stop = true;
    }
    /**
     * 基于volatile关键词的优化后的双重检查单例,即把实例声明为volatile
     * 当instance2被改变后,立即消除线程工作内存的缓存,使其读取主存的地址
     * 当然使用静态内部类单例更为简洁和方便
     */
    private volatile static DanLiDemo04 instance2;
    private DanLiDemo04() {}
    public static DanLiDemo04 getInstance2(){
        if(instance ==null) {
            synchronized (DanLiDemo04.class) {
                if (instance == null) {
                    instance = new DanLiDemo04();
                }
            }
        }
        return instance;
    }
}

静态内部类式

/**
 * @Author if
 * @Description: 静态内部类单例模式
 * 线程安全,效率高,只在调用时创建且不需要进行判断
 * 与饿汉、饱汉的区别:
 * 外部类没有static属性,所以不会像饿汉式一样立即创建对象
 * 只有在调用到getInstance时才会加载内部类Instance,才会进行创建对象并返回
 * 对象是static final的,所以保证了内存地址中只会有一个实例对象,保证了安全性
 * 兼备了并发高效调用和延迟加载的优势
 * @Date 2021-09-20 下午 08:24
 */
public class DanLiDemo03 {
    private static class Instance{
        public static final DanLiDemo03 instance=new DanLiDemo03();
    }
    private DanLiDemo03() {}
    public static DanLiDemo03 getInstance(){
        return Instance.instance;
    }
}
手把手教你使用ConvNeXt训练自己数据集和推理,ConvNeXt模型训练(CVPR 2022),一个能挑战 Vision Transformer 的卷积神经网络,含完整代码和数据集 阅读详情

相关推荐

论文理解【LLM-OR】—— 【PaMOP】Guiding Large Language Models in Modeling Optimization Problem

针对 LLM 求解运筹优化任务,PaMOP 通过约束划分树分离子问题,实现复杂优化问题的分块建模,并结合求解器反馈与反向翻译一致性检查迭代纠错,降低子任务复杂度,提升可执行率与建模准确性。

佚失的诗篇 1006

单例模式 Singleton Pattern笔记

文章目录使用注意 #单例模式 Singleton Pattern 单例模式(Singleton Pattern)属于创建型模式,它提供了一种创建单一对象的方式。 单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。 通常,我们在new一个对象时,不能防止它被实例化多次,怎样保证它只被实例化一次呢,一个最好的办法就是让这个类自身去创建并保存它的唯一实例,再提供一个访问该实例的公共方法,那么...

wanfengranxue的专栏 440

Linux之GTK系列教程

00、背上行囊1——程序员学习之道 01、背上行囊2——为什么要学习GTK 02、背上行囊3——GUI概述 03、背上行囊4——GTK简介 04、背上行囊5——GTK环境搭建( Linux ) 05、背上行囊6——GTK环境搭建( windows ) 06、踏上旅途1——一个简单的空白窗口 07、踏上旅途2——控件的添加 08、踏上旅途3——布局容器之水平布局 09、踏上旅途

每天积累一点点 2万+

Golang学习笔记_27——单例模式

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。这种模式在很多场景下非常有用,比如数据库连接池、日志系统等,这些场景中我们通常希望在整个应用程序中只有一个对象来负责相关的操作,避免资源的浪费和数据的不一致。

LuckyLay的博客 1900

复现Fastjson反序列化漏洞(从dnslog回显到rce再到反弹shell)

Fastjson是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。它还可以用于将JSON字符串转换为等效的Java对象,fastjson爆出多个反序列化远程命令执行漏洞,攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。......

记录并分享学习安全的知识点.. 2693

一文读懂 SAP Web Dispatcher 配置参考:让 Gateway、OData 与后端服务各走各路

SAP Web Dispatcher在Fiori项目中常被低估,实际上它作为企业系统的HTTP(s)入口,承担着流量分发和安全防护双重职责。该组件通过URL路径规则(如/sap/opu/odata/转发至Gateway系统)实现多系统路由,隐藏后端复杂性,提供统一访问入口。配置要点包括HTTPS参数设置、客户端证书转发、端口定义以及系统冲突处理策略。合理的配置能确保前端统一访问、网络边界清晰可控,同时降低跨团队协作成本。生产环境需根据实际网络架构调整官方示例配置。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 155

【设计模式笔记】单例模式Singleton Pattern

单例模式是比较简单的一个模式,项目中也经常用得到。

smok56888的专栏 500

C#与倍福TwinCAT3通信实战:ADS协议封装与设备变量读写完整源码

倍福(Beckhoff)TwinCAT3 作为工业自动化领域主流的软PLC系统,其内置的ADS(Automation Device Specification)协议是实现上位机与TwinCAT3通信的核心标准。传统ADS通信开发存在门槛高(协议细节复杂)、稳定性差(缺乏统一异常处理)、复用性低(重复编码)等问题。本文基于 C# 技术栈,聚焦“协议封装标准化、变量读写易用化、通信稳定工业化”核心需求,提供一套完整的 ADS 协议封装方案与设备变量读写源码。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1987

HeadFirst 设计模式学习笔记5--单例模式

本文已搬家至【HeadFirst 设计模式学习笔记】5 单例模式

gnuhpc的专栏 2738

[P4V]Perforce(P4V)使用教程

1.前言 Perforce SCM System是一款构建于可伸缩客户/服务器结构之上的软件配置管理工具。仅仅应用TCP/IP,开发人员就能够通过多种Perforce客户端(几种平台的GUI、WEB、或命令行)访问Perforce服务器。Perforce能够被快速和容易地部署,即使对大型或分布式的站点,也只要求最小限度的管理。Perforce可以使用在50多个操作系统中,它包括版...

元直的博客 2万+

DP83869HM的LWIP性能测试

E:/Xilinx/Vitis/2021.1/data/embeddedsw/ThirdParty/sw_services/lwip211_v2_0/src/contrib/ports/xilinx/netif/xemacpsif_physpeed.c文件中的。然后phy_setup_emacps中调用get_IEEE_phy_speed函数,根据PHY的ID判断出Marvell或TI或Realtek的PHY,调用对应的网速自动协商函数get_TI_phy_speed,该函数中的部分配置需要注释。

FPGA艺术家的博客 354

《游戏编程模式》学习笔记(六)单例模式 Singleton Pattern

保证一个类只有一个实例,并且提供了访问该实例的全局访问点。定义这种东西一般都是不说人话的,要想要理解这句话的意思,我们得把它揉开了才能搞明白。我们先看前半句 “保证一个类只有一个实例”,单例一般使用类来实现,也就是说,这个单例类,其有且只能有一个实例化的对象instance,一旦出现多个,就不是单例模式。后半句“并且提供了访问该实例的全局访问点”,这句话的意思是,这个实例化的对象是全局可见的,任何系统,任何类都可以访问这个实例化的单例对象。

Currybeefer的博客 1291

20、机器人硬件改造与Geomagic Touch设备的运动学和动力学模型

本文详细介绍了机器人CRS 465和255的硬件改造过程,包括数字阶段、模拟阶段、功率阶段及软件实现,并深入研究了Geomagic Touch触觉设备的五自由度与三自由度运动学、微分运动学及动力学模型。文章还探讨了其在虚拟手术、装配等场景中的应用,提出了硬件与模型优化方向,如电源管理改进、信号处理优化、参数校准与自适应控制,并展望了多机器人协作、多传感器融合与智能控制算法的发展前景。

e4f5g6h7的博客 121

设计模式笔记7:单例模式(Singleton Pattern)

一、单例模式的内容 单例模式确保一个类只有一个实例,并提供全局访问点。单例模式是一种对象创建型模式。单例模式又名单件模式或单态模式。 二、单例模式特点 某个类只能有一个实例。它必须自行创建这个实例。它必须自行向整个系统提供这个实例。 三、单例模式结构图 Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,确保用户无

Snowball 1471

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

3.单例模式Singleton Pattern--学习笔记

1.场景:认为皇帝是个单例模式, 有皇帝,有大臣,大臣是要上朝参见皇帝的,今参拜的皇帝应该和昨、前的一样, 大臣磕完头,抬头一看,嗨,还是昨那个皇帝,单例模式,绝对的单例模式, 2.类图: 3.程序 public class Emperor { private static Emperor emperor = null; private Emperor() { } public static Emperor getInstance(){ if (emperor == null){

weixin_39795049的博客 214

VC中sqlite的使用

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

设计模式 - 学习笔记 - 单例模式Singleton Pattern

设计模式 - 学习笔记 - 单例模式Singleton Pattern学习总结应用场景UML代码示例饿汉 hungry 学习总结 单列的核心就是这东西,我们只想要一份,无论多少人调用它。都是调这个实例。 饱汉:调用时才创建实例,能省点是点。 饿汉:初始化时直接生成实例,要用时直接调,无需等待。当然如果一直都没调它,那就活活浪费着。。。 Java实现中考虑线程安全问题,衍生出了8种方式。其实好多是凑数的没啥意义。 线程安全问题来自于饱汉模式运行时动态创建实例,多线程自然就会有撞车风险。饿汉模式就不存在线程安

灵台方寸山斜月三星洞 485

设计模式笔记(5) The Singleton Pattern (单例模式)

文章目录单例模式和static修饰的全局变量区别:定义Classic Signleton多线程问题处理 单例模式 一个对象只有一个实例。 比如下面这些类,我们希望在程序中只有唯一的,如果实例化超过两个,则会造成资源的浪费或者不一致的结果。 线程池 caches 电话本 处理属性和注册的设置 用来登录的类 用来作为一个设备对象去驱动设备或者显卡的类 和static修饰的全局变量区别: 全局变量需...

铁锹的填坑记录 259

设计模式笔记——(一:单例模式 Singleton Pattern)

实际开发中,我们经常遇到这样的情况,为了节约系统资源,有时需要确保系统中某个类只有唯一一个实例,当这个唯一实例创建成功之后,我们无法再创建一个同类型的其他对象,所有的操作都只能基于这个唯一实例。为了确保对象的唯一性,我们可以通过单例模式来实现,这就是单例模式的动机所在。

小雨的专栏 827

设计模式笔记之单例模式(Singleton Pattern)

一概述:单例模式确保一个类只有一个实例,并提供一个全局访问点(static)。二。构建单例模式的要点:1.构造方法私有化2静态属性私有化,提供公共方法获取静态属性的实例3.多线程下加synchronized关键字三。懒汉式:private Singleton1(){} priv

j2eelamp的专栏 729

C#设计模式读书笔记之线程安全的单例模式(Singleton Pattern)

单例模式(Singleton Pattern)【使用频率:★★★★★】 1.概述: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。 单例指的是只能存在一个实例的类,在C#中,更准确的说法是在每个AppDomain之中只能存在一个实例的类,它是软件工程中使用最多的几种模式之一。在第一个使用者创建了这个类的实例之后,其后需要使用这...

qq826364410的专栏 1321

设计模式学习笔记之单例模式

文章目录前言什么是单例模式单例模式的实现枚举饿汉式静态内部类注意事项单例模式的优缺点推荐资料 前言 这是一篇学习笔记,内容很多是来源于网上的资料,按照自己学习情况进行的总结。 我的个人博客:海加尔金鹰 什么是单例模式 定义:一个类在系统当中只存在一个实例,每次获取到这个类的实例都是同一个。主要用于处理系统当中某个频繁创建和摧毁的类。 特点 : 单例类只有一个实例对象 该单例对象必须由单例类自行...

光滑的秃头 231

【Unity笔记01】基于单例模式的简单UI框架

控制面板的打开和关闭,带动画。

X_StarX的博客 443

设计模式学习笔记十:单例模式(Singleton Pattern)

设计模式学习笔记十:单例模式(Singleton Pattern)     1.概述     单例模式(Singleton Pattern)又称单件模式,单例模式保证一个类仅有一个实例,并提供一个访问的他的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化对个对象,一个最好的办法就是,让类自身负责保存他的唯一实例,这个类可以保证没有其他实例可以被创建

AlbenXie的博客 483

C#笔记13 静态类与单例模式

C#笔记18 静态类 ——本系列是基于人民邮电出版社《C#2008 C#图解教程》、清华大学出版社《C#入门经典(第五版)》两本书的自学C#笔记,如果您发现了本文的纰漏,还望不吝指正。 写在前边 *复习:类是一种活动的数据结构 程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合,称之为类 在上几篇笔记中,我们介绍了类的定义,以及它的一些类成员,其中包括实例成员和静态成员(使用static修饰符声明的类成员),同理,类也可以在创建时直接使用static关键字修饰 1. 什么是静态类 用static关键

Tervor_HAN的博客 572

单例模式----读书笔记

单例模式—读书笔记 单例模式,顾名思义,就是用来创建一个独一无二的,只能有一个实例的对象的入场券。因为在实际应用中,有些对象我们只需要一个,比如说,线程池、缓存、对话框、注册表等。 当然,我们也可以使用全局对象来达到和单例模式一样的作用,但是全局对象有一些缺点,比如说:如果将对象赋值给一个全局变量,那么必须在程序一开始就创建好该对象,如果这个对象很耗资源,但是我们又没有用到它,那就会形成一种浪费。...

u011337574的专栏 235
上一篇: Stack类、Queue类和Deque类常用方法(防止忘记)
下一篇: ElasticSearch笔记
Jay_Chou345
博客等级 码龄7年 199粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值