Java设计模式:单例模式双检锁,volatile

【Java硬核知识:设计模式落地误区】单例模式的七种写法:从DCL到枚举的终极进化 摘要:单例模式作为 Java 设计模式中最为基础且常用的模式之一,其实现方式多样。本文深入探讨了单例模式的七种常见写法,从双检锁(DCL)到枚举单例的演变过程。着重分析了双检锁中 volatile 的必要性、静态内部类实现延迟加载的原理以及枚举单例防反射攻击的原理。通过详细的实操流程和完整代码示例,帮助开发者正确理解和运用单例模式,避免在实际开发中陷入设计模式落地的误区。 阅读详情

学习之前

作为Java萌新,真的很想吐槽。不懂的知识上网去搜,很多时候看到的是长篇大论,动不动就是底层,更离谱的是费劲九牛二虎之力看完了之后仍然是不明所以。因此决定把自己碰到的问题真正弄明白之后在这里记录下来,并以一种浅显易懂的方法表达出来,尽可能让部分人节省一些时间,当然对我自己也是一种提升。

一句话概括

单例模式

该类的对象只会被创建一个实例,多次获取到的都同一个栗子。

双检索

为了确保该对象的唯一性采取的措施。

volatile

多个线程访问同一变量情况下确保不会出错,不能保证线程安全。就是说在已经线程安全的情况下一样需要。

单例模式代码

 这个不重要,和很多帖子写的都一样,之前没看到过的好好看看。

双检索怎么保证栗子唯一的:

新手搞不懂双检索的原因大部分都是被这个唬人的名字给搞乱了,双检索听起来就好厉害。直接来看这个,我相信很大一部分人就能看懂了。

 生活中的栗子

如果还是不够清楚呢,生活中的例子应该更利于理解。现在想象你去买两个包子吃,第一个if就是包子店门口的大屏幕,上面显示卖完的时候我们就不进去了。但是就算我们进去了,就算锅里还有没有包子还是不能卖给我们。所以最终决定能不能买到包子实际上是营业员这里(锅里的包子数)决定的,外面加一个大屏幕的好处是我们不用再进入店里跟营业员浪费口舌。除非营业员小姐姐长得非常好看,这时候我是非常乐意的。但代码长得都是0和1这个鬼样子,真的没必要。

外面的这个判断加和不加对结果是没有影响的,但是不加上会影响代码的效率,每个线程都要执行synchronized这段代码的内容,而且加锁后的代码多个线程不能同时访问,就会更慢。

一直嫌弃别人解释的不清楚,不知道自己表达能力怎么样。
这是我个人的理解给大家分享一下,有问题或者还是不懂补充可以评论,我看到之后会及时回复。下次的学习心得会继续发的,新手赶紧看过来喽。

 

java+mysql实现的检索大作业 java与数据库结合的一款大作业。 立即下载

相关推荐

RK3588 EVB开发板原理图讲解【六】

该原理图展示了eMMC Flash与主控芯片之间的连接关系,以及相关的电源、信号线路和去耦电容等。

weixin_48721556的博客 1174

synchronized同步以及双重检索

一、synchronized同步参考 两个线程同时执行会出错,那么最简单的方法是让CPU执行完一个线程,再执行另一个线程,那么Java中给出了一个非常简单的解决办法,【synchronized】:是一种同步锁。简单解释一下:就是synchronized修饰的代码,同时只能有一个线程执行,即执行完一个线程,再执行另一个,其它需要执行的线程都要排队 。 synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块......

时代新人的博客 1426

在VScode中配置Python开发环境(详细图片文字结合)

需要用到的软件下载包在官网里找一下,在window下的点击安装就行了;找一个3.8到3.10版本差不多都完善跟的上;

m0_72811193的博客 1599

java设计模式--单例模式(饿汉、懒汉、双重检索)-附代码

单例模式 顾名思义就是任何适合都只能有一个实例。且该类需自行创建这个实例,并对其他的类提供调用这一实例的方法。是java中常用的设计模式。 单例在实现方式上主要有:饿汉模式、懒汉模式(线程不安全)、懒汉模式(线程安全)、双重检索模式(推荐使用)以及其他不列举。

qq_36178165的博客 1651

Zemax操作40--序列模式中LD光源模拟

LD模拟

lzy750750的博客 9122

IC设计新手必看:如何正确使用去耦电容(decap)避免电源噪声?

本文深入探讨了IC设计中去耦电容(decap)的应用技巧,从核心原理到布局实现,帮助新手工程师有效抑制电源噪声。文章详细解析了MIM、MOM等电容类型的特性与选择策略,并提供了先进的布局技巧和验证方法,特别适用于28nm以下先进工艺的电路设计挑战。

weixin_30555125的博客 114

Java实现双检索单例以及面试解答

单例、多线程、双检索

weixin_46705194的博客 419

5G NR LDPC码(2)—— 从基图到速率匹配:解码5G高速数据信道的标准化设计

本文深入解析了5G NR LDPC码的标准化设计流程。从作为核心骨架的基图(BG1/BG2)出发,详细阐述了其如何通过扩展因子Z灵活生成实际校验矩阵,并协同传输块大小计算与分段策略。文章重点剖析了基于循环缓存和冗余版本的速率匹配机制,以及其如何高效支撑增量冗余混合自动重传请求,从而确保5G高速数据信道在复杂环境下的可靠与高效传输。

weixin_29206669的博客 272

Java设计模式双重检索式

//java单例模式双重检索式-解决懒汉式的问题 // // /** * 优点 * 解决了一开始创建对象的问题 * 多个线程在一起执行,初期可能会创建多个对象 * 双重检索式避免了这一点 * 程序初期结束之后,并不会影响后面的效率 * 缺点: * 因为JVM内存机制,有微小的几率会导致创建多个对象 * */ public class ShuangChongJianSuo {...

qq_34341951的博客 2903

MIPI D-PHY的校准测试

MIPI的校准测试困扰了很久,今天终于得以解决!

一只豌豆象的博客 3921

PyTorch视觉项目实战:从数据加载到模型部署

PyTorch视觉项目实战:从数据加载到模型部署 ,人工智能,计算机视觉,大模型,AI,随着深度学习在计算机视觉领域的飞速发展,PyTorch 凭借其简洁的代码风格、动态计算图特性以及强大的社区支持,成为众多开发者和研究人员的首选框架。从数据加载、模型构建与训练,到最终的模型部署,PyTorch 提供了一套完整且灵活的解决方案。本文将通过实际项目案例,详细阐述基于 PyTorch 的视觉项目全流程,结合丰富的代码示例和概念解析,帮助读者掌握从项目起步到落地的关键技术。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

双检索 JAVA_java-gremlin查询以检索顶点之间具有多个边的...

您的图表似乎并未表明双向边缘是可能的,因此我将牢记这一假设.这是一个简单的示例图-请考虑包括一个有关未来问题的图,因为它比图片和文字描述容易得多,对于那些阅读您的问题的人来说,理解并开始编写Gremlin遍历可以帮助您:g.addV().property(id,'a').as('a').addV().property(id,'b').as('b').addV().property(id,'c')....

weixin_42549723的博客 581

【Bug已解决】Codex CLI 报 stream disconnected before completion 解决方案

方案适用场景推荐指数更新根证书库社区验证的最常见根因⭐⭐⭐⭐⭐检查系统时间虚拟机/容器等特殊运行环境⭐⭐⭐⭐核对 base_url 配置排除证书问题后的下一步排查⭐⭐⭐⭐更换网络环境测试怀疑本地网络设备存在干扰⭐⭐⭐升级到最新版本已知版本缺陷的场景⭐⭐⭐⭐报错虽然表现形式很像网络连接问题,但社区排查的多个真实案例表明,很大一部分情况的根因其实是本机系统的 TLS 证书信任链异常或系统时间不准确,而不是单纯的网络质量问题。优先检查并更新系统根证书库,这是社区验证过的高频根因。

一键难忘的博客 8022

单例模式和实现详解

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 假如一个对象被频繁的使用和销毁,那么对于内存来说无疑是比较浪费的,就比如说我们操作数据库,我们创建数据库连接去操作数据库,我们创建的数据库连接明明是可以重复利用的,但是我们却不停的创建和销毁,这就

m0_51212267的博客 1417

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

常用的设计模式-单列模式

单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 饿汉式 创建一个 Singleton 类。 创建自己唯一实例方法,给所有其

weixin_44325370的博客 172

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

设计模式——单例模式

本文介绍了六种单例模式的实现方式,同时简要的分析了它们各自的优缺点以及在多线程情况下是如何造成线程不安全的,以及最佳实现方式枚举类的介绍

qq_41403171的博客 1241

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java 设计模式 -- 单例模式的实现(饿汉式、枚举饿汉式、懒汉式、双检锁懒汉式、内部类懒汉式)、jdk 中用到单例模式的场景、DCL实现单例需用volatile 修饰静态变量

单例模式保证java应用程序中,一个类Class只有一个实例在,使用单例模式好处在于可以节省内存,节约资源,对于一般频繁创建和销毁对象的可以使用单例模式。 因为它限制了实例的个数,有利于java垃圾回收。好的单例模式也能提高性能。例如:数据库连接池、httpclient连接单例。对于系统中的某些类来说,只有一个实例很重要,Windows中就只能打开一个任务管理器。

天行健 君子以自强不息,地势坤 君子以厚德载物。 511

AI助教加持软考复习:让快马Kimi智能生成设计模式线程安全代码详解

对于这类生成了完整可运行程序的学习案例,平台还提供一键部署的能力,虽然我们这里主要是本地学习验证,但这种功能意味着如果你写的是一个Web服务或应用,也能快速分享给别人在线体验,整个过程很省心。对于软考这种知识点繁多、实践性强的考试,自己啃书容易抓不住重点,而AI可以根据你模糊的描述,快速生成一个包含正反案例、详细注释和测试的完整学习单元,极大地提升了复习的针对性和效率。方法,并打印出获取到的实例的哈希码。这个“两次检查加锁”的机制,就是“双检锁”名字的由来,它在保证线程安全的同时,兼顾了性能。

SilvermistRaven28的博客 89

02-设计模式——单例模式

设计模式——单例模式 通过 javap -v -p xxxx.class 可以查看对应字节码信息 模式定义 保证一个类只有一个实例,并且提供一个全局访问点 场景: 重量级的对象,不需要多个实例,如线程池,数据库连接池 懒汉模式 1.懒汉模式:延迟加载,只有在真正使用的时候,才开始实例化 线程安全问题 double check 双重检查,加锁优化 编译器(JIT),CPU有可能对指令进行重排序,导致使用到尚未初始化的实例,可以通过添加volatile关键字进行修饰,对于volatile修饰的字段,可以

胖胖爱吃肉~的博客 340

完整版单列模式的讲解,从网站上找过来的,方便自己以后学习

在网上找了些资料,一个完整版的单列模式,以及对double_clicked_locking的讲解 原文:[url]http://kenwublog.com/explain-java-memory-model-in-detail[/url] In software engineering, double-checked locking (also known as "double-checked...

xiongxu的专栏 193

java-单列模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 2、避免对资源的多重占用(比如写文件操作)。 缺点: 1、没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。 使用

乐百寿 518

volatile与synchronized在Java单例模式中的应用

在大量Java设计模式中,单例模式是常见的构建模式之一,其实现方式也可以根据某些特性产生多个变形。 下面介绍在Java 1.5中,结合使用volatile与synchronized,通过双校验锁机制实现的单例模式,实现代码如下: public class MyDoubleCheckedSingleton { private volatile static MyDoubleCheckedSin

成长的足迹 1861

为什么要使用双检锁创建单例模式

为什么要使用双检锁创建单例模式

weixin_45819295的博客 746

设计模式-单例模式

单例模式(SingletonPattern)属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。一个全局使用的类频繁地创建与销毁。当您想控制实例数目,节省系统资源的时候。判断系统是否已经有这个单例,如果有则返回,如果没有则创建。没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。......

Mamba Out 202

Java单例模式的并发

在GoF的23种设计模式中,单例模式是比较简单的一种。然而,有时候越是简单的东西越容易出现问题。下面就单例设计模式详细的探讨一下。   所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在。就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等。   1. 最简单的实现   首先,能够想到的最简单的实...

summer85的博客 462

23种设计模式之单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 单例模式又分为饱汉式单例模式和饥汉式单例模式。 饥汉式单例模式: 是否 Lazy 初始化:否 是否多线程安全:是 实现难度:易 描述:这种方式比较常用,但容易产生垃圾对象。优点:

qq_48292607的博客 744
大白话谈Java
博客等级 码龄5年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值