单例模式-枚举类实现

Java 枚举实现单例模式,线程安全又优雅! 枚举在序列化和反序列化时,并不会调用构造方法,这就防止了反序列化导致的单例破坏的问题。反编译任何一个枚举类会发现,枚举类里的各个枚举项是是通过static代码块来定义和初始化的(可以见后面3.2节反编译分析单例枚举有分析到这个),它们会在类被加载时完成初始化,而java类的加载由JVM保证线程安全,所以,创建一个Enum类型的枚举是线程安全的。因为存在着指令重排序的优化,第2、3步的顺序是不能保证的,最后的执行顺序可能是1-2-3,也可能是1-3-2,假如执行顺序是1-3-2,我们看看会出现什么问题。 阅读详情
public class SingletonObject {

        private SingletonObject(){

        }

        /**
         * 枚举类型是线程安全的,并且只会装载一次
         */
        private enum Singleton{
            INSTANCE;

            private final SingletonObject instance;

            Singleton(){
                instance = new SingletonObject();
            }

            private SingletonObject getInstance(){
                return instance;
            }
        }

        public static SingletonObject getInstance(){

            return Singleton.INSTANCE.getInstance();
        }
    }

 

枚举类来实现单例模式 前言 这是设计模式的第一篇文章,我们从单例模式开始入手,单例模式是 Java 设计模式中最简单的一种,只需要一个类就能实现单例模式,但是,你可不能小看单例模式,虽然从设计上来说它比较简单,但是在实现当中你会遇到非常多的坑,所以,系好安全带,上车。 单例模式的定义 单例模式就是在程序运行中只实例化一次,创建一个全局唯一对象,有点像 Java 的静态变量,但是单例模式要优于静态变量,静态变量在程... 阅读详情

相关推荐

华为HCIA-Datacom实战:200人企业园区网从规划到部署全流程解析

本文详细解析了华为HCIA-Datacom认证实战中200人企业园区网的规划与部署全流程。从需求分析、组网架构设计到设备选型、VLAN划分及安全策略实施,全面覆盖园区网建设的关键环节,特别针对部门隔离、无线覆盖和基础安全防护等典型场景提供可落地的解决方案。

f0g1h2的博客 712

单例模式之枚举实现

如果你没有学过单例模式,请点击:确保对象的唯一性——单例模式。 有很多网友留言说我漏掉了一种非常重要的Java语言的单例模式实现方式——枚举。 这篇姗姗来迟的博文将弥补这个“巨大的”缺陷。 在Java语言中,如果综合考虑线程安全和延迟加载,IoDH(Initialization Demand Holder)无疑是一种比较好的实现方式【参见:确保对象的唯一性——单例模式 (四)】,它巧妙利用了Java静态内部类的特点。 但...

刘伟技术博客 3万+

避坑指南:MTK平台Widevine L1密钥安装全流程详解(含SP META工具使用与Log分析)

本文详细解析了MTK平台实现Widevine L1认证的全流程,涵盖密钥申请、格式转换、安全烧录等关键步骤,特别针对Trustonic TEE环境下的SP META工具使用与日志分析提供实用指南。帮助开发者规避常见错误,确保DRM密钥安全部署,满足高端内容保护需求。

weixin_27219587的博客 476

枚举实现单例模式

单例模式的特点 构造方法私有化 实例化的变量引用私有化 获取实例的方法公有 常用单例模式 饿汉式 public class Singleton { /* * 利用静态变量来记录Singleton的唯一实例 * 直接初始化静态变量,这样就可以确保线程安全了 */ private static final Singleton uniqueInstance = new Singleton(); /* * 构造器私有化,只有Sing

qq_44789083的博客 4357

做cellchat画图时自环的角度颠倒,如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 465

YOLOv5 自定义模型 Android 部署完整指南

本文详细介绍了将YOLOv5模型部署到Android设备的完整流程,包含三个核心部分:首先验证官方模型测试,确保基础环境配置正确;随后进行模型转换,从PyTorch导出ONNX格式并优化,再转换为NCNN格式;最后在Android项目中集成自定义模型,包括文件替换、参数修改和代码适配。教程基于YOLOv5 6.1版本,使用NCNN框架进行移动端推理,涵盖了常见问题解决方案和关键配置要点,为开发者提供了从训练到部署的完整技术路线。

FJN110的博客 592

枚举类实现单例模式——最优解决方案

单例模式是一种设计模式,旨在确保某个类在应用程序生命周期内只有一个实例。其核心思想是通过私有化构造方法来限制外部创建对象的能力,同时通过提供一个全局访问点来获取这个唯一的实例。饿汉式:类加载时就创建实例,线程安全但浪费资源。懒汉式:延迟加载实例,线程安全但并发性能较差。双重校验锁:通过减少同步操作提升并发性能,但实现较为复杂。静态内部类:懒加载和线程安全并存,较为优雅。但这些方法都有可能被反射和序列化破坏,这里就引出了枚举类实现单例的优势。实现简单。

weixin_54574094的博客 2478

Git下载与安装

一、Git下载 二、Git安装

欢迎订阅我的“JAVA全栈开发笔记(全)”专栏,价格优惠,仅需19.9元。 6万+

为什么用枚举类来实现单例模式越来越流行?

前言 单例模式是 Java 设计模式中最简单的一种,只需要一个类就能实现单例模式,但是,你可不能小看单例模式,虽然从设计上来说它比较简单,但是在实现当中你会遇到非常多的坑,所以,系好安全带,上车。 单例模式的定义 单例模式就是在程序运行中只实例化一次,创建一个全局唯一对象,有点像 Java 的静态变量,但是单例模式要由于静态变量,静态变量在程序启动的时候就要创建,会造成大量的资源浪费,好的单例模式...

平头哥的技术博文 4226

C++ int转四字节数组

字节转换

我不是码农的博客~~~ 974

Python爬虫实战 | 拼多多商品评论采集与深度分析

本文从 API 调用、网页渲染到情感分析与关键词提取,全流程剖析了“拼多多商品评论采集与分析”项目。Scrapy + API 可快速抓取评论;Playwright 可突破 API 限制,抓取完整页面内容;数据清洗 + 分析揭示用户真实反馈;可持续部署、扩展至更多商品 & 时间段;

2201_76125261的博客 1696

枚举类实现单例模式

主类 package designMode.Singleton; public class Singleton_template { private String id; private String information; public String getId() { return id; } public void s...

weixin_41804367的博客 468

基于泰勒展开改进的物理信息神经网络

基于泰勒展开改进的物理信息神经网络

天天酷科研的博客 505

java1.5之后,枚举类实现单例模式

一. 单例模式 传统的懒汉式,饿汉式实现单例模式,我就不在此赘述了,直接切入主题,枚举类实现单例模式. 话不多说,直接上代码,注释很详细了..... 枚举类 package com.yfq.yfq_admin.testEnum; import java.time.LocalDateTime; import java.time.ZoneOffset; /** * 描述:枚举,单...

大诚子的博客 507

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

解析——为什么单元素的枚举类型是单例模式的最佳实现

关于单例模式,我们可以使用静态内部类、双重检测的实现方法来保证线程安全,那么该如何保证单例模式最核心的作用——“实现该模式的类有且只有一个实例对象”呢? 我们知道,创建一个对象的方式有:new、克隆、序列化、反射。 由于单例模式提供的是一个私有的构造函数,所以不能外部使用new的方式创建对象。 虽然clone()是Object的方法,也就是说每个对象都拥有一个克隆方法,但是某一个对象直接调用cl...

whgtheone的博客 4113

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

枚举类为啥时单例模式的最好实现

https://www.cnblogs.com/chiclee/p/9097772.html

u012977486的博客 415

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

利用枚举类实现单例模式

使用枚举类实现单例模式,代码如下,其中main方法测试hashCode是否一致: public class EnumSingleton { private EnumSingleton() { } public static EnumSingleton getInstance() { return Singleton.INSTANCE.instance; ...

weixin_33725272的博客 757

java枚举类及面试题为什么枚举实现单例模式是安全的?

目录枚举类为什么会有枚举类?枚举类的使用枚举类的常用方法枚举的构造枚举类型能被反射吗?为什么枚举实现单例模式是安全的?枚举类的优缺点 枚举类 为什么会有枚举类? 假如说程序中有一些颜色的状态,或者说消息的类型等,在JDK1.5之前,只能用常量来进行表示 public class TestEnum { public static final int RED = 1; public static final int BLACK = 2; public static final int

qq_41552331的博客 2172

【Java】单例模式的五种实现方式以及为什么推荐枚举类

构造私有 静态成员 提供方法获取测试一下由于 是静态的 不管你有没有调用方法去拿这个实例,他也会先加载到内存中同时,还能通过反射创建出多个对象。

纸上得来终觉浅,绝知此事要躬行 892

枚举类的实现 - - -单例模式

枚举类 用来实现 单例模式 不会被破坏 如果不用枚举 普通类 的单例会被 序列化 和 反射 破坏掉 用法 单例模式 在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。 servlet -controller 控制器 管理器 就是单例 单例设计思路: 构造器私有化 提供私有的静态成员变量 提供共有的静态方法 单例模式有2类 饿汉模式 懒汉

m0_47760827的博客 917

基于枚举类 Enum 实现的单例模式

参考资料: 1、https://www.cnblogs.com/cielosun/p/6596475.html Java枚举enum以及应用:枚举实现单例模式 2、https://blog.youkuaiyun.com/yy254117440/article/details/52305175 Java 利用枚举实现单例模式 public enum Singleton_3 { INST...

HeatDeath的博客 3622

80. Java 枚举类 - 使用枚举实现单例模式

在 Java 中,使用枚举实现单例模式是最简单且安全的方式。相比于传统的单例模式,枚举单例具有防止反射攻击、防止反序列化破坏、天然线程安全以及代码简洁等优势。通过 INSTANCE 枚举常量,可以轻松实现单例模式,并且可以添加成员变量和方法。枚举单例的构造方法是私有的,反射无法创建新实例,反序列化也不会破坏单例的唯一性。虽然枚举单例不支持懒加载和继承其他类,但在大多数场景下,它是最优的选择,尤其是需要全局唯一对象且防止反射和反序列化破坏时。因此,推荐使用枚举单例,除非需要懒加载或继承其他类。

yaoxin521123的博客 1819
上一篇: 2020-10-14
下一篇: 面对对象之间关系
陌逸_逺
博客等级 码龄9年 13粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值