Java设计模式-单列模式

java单列模式的几种实现方式 java单列模式的几种实现方式 单列模式(SIngleton pattern)是java中最基础的一种设计模式,他的作用是保证一个类仅有一个实例,并且提供一个访问它的全局访问点,避免重复创建对象,节省系统资源。以下通过五种方式来实现,可根据不同的场景选用。 一、饿汉式 public class Singleton { //类加载时就创建本类的对象 private static Singleton instance = new Singleton(); //构造器私有化,使外部不能通过 阅读详情

1.单列模式(懒汉式)

    //懒汉模式
    class LazySingInstance {
        private volatile  static LazySingInstance instance;
        private LazySingInstance(){
        }
        public static LazySingInstance getInstance(){
            if (null==instance){
                synchronized (LazySingInstance.class){
                    if (null==instance){
                        instance=new LazySingInstance();
                    }
                }
            }
            return instance;
        }
    }

注: 懒汉模式:延迟加载,只有在真正使用的时候,才开始实例化. 

     1.线程安全问题

     2.double check 加锁优化

     3.编译器(JIT),CPU 有可能对指令进行重排序,导致使用尚未初始化的实例,可以通过添加volatile关键字进行修饰对于volatile修饰的字段,可以防止指令重排.

2.单列模式(饿汉式)

//饿汉模式
class HungrySingInstance{

    private static HungrySingInstance instance=new HungrySingInstance();
    private HungrySingInstance(){

    }
    public static HungrySingInstance getInstance(){

        return instance;
    }

}

注:饿汉模式只有在真正使用对应类时,才会触发初始化 比如(当前类是启动类即main函数所在类,直接进行new操作,访问静态属性,访问静态方法,用反射访问类,初始化一个类的子类等)

类加载初始化阶段就完成了实例的初始化,本质上就是借助于jvm类加载机制,保证实例的唯一性(初始化过程只会执行一次)及线程安全(jvm以同步的形式来完成类加载的整个过程).

类加载过程:

 1.加载二进制数据到内存中,生成对应的class数据结构

2.连接: a验证  b准备(给类的静态成员变量赋默认值),c.解析

3.初始化: 给类的静态变量赋初始值.

 

java集合详解(单列集合)——全网最通俗易懂的讲解 阅读详情

相关推荐

UE5网络模块实战:属性复制、RPC与联机开发踩坑指南

多人联机开发中,网络同步是核心难题。UE5网络模块以服务器权威为基础,通过Actor复制、RPC和所有权机制实现多端状态一致。理解属性复制与OnRep回调、区分Server/Client/Multicast RPC的适用场景,是构建稳定联机架构的关键。本文结合数字孪生与多端协作场景,探讨如何将渲染与逻辑分离,并针对打包后网络失效、端口防火墙、崩溃排查等工程实践问题给出解决方案。通过蓝图接口解耦表现层,利用C++创建StaticMesh组件实现服务器逻辑与客户端表现分离,同时注意专用服务器不加载渲染依赖(如D

weixin_29010003的博客 272

Spring Boot注解-@Component-@Configuration-@Service模式-单例模式-多例模式

网上看到有个博主说@Component和@Configuration区别在于@Component中的@Bean是类似与原型模式 ,实际上我在自己机器上测试的时候他们是没有区别的。甚至注解-@Component-@Configuration-@Service三者之间还可以互换。(我在注解@Service之后使用@PostConstruct注解init(),然后init会直接执行。可以使用@Scope()来改变@Bean和@Component-@Configuration-@Service注解Bean的模式。

qq_45568546的博客 939

用LTspice仿真CMOS反相器功耗?这份避坑指南能省你3天调试时间

本文详细介绍了如何使用LTspice准确仿真CMOS反相器的功耗,包括动态功耗、短路功耗和静态功耗的测量技巧。通过工程实践指南,帮助电子工程师避开常见陷阱,优化仿真参数设置,提升仿真结果的可靠性,节省调试时间。

w7x8y9z的博客 189

Java集合进阶——单列集合

数组+链表+红黑树⑴引用构造方法时,方法底层会创建一个默认长度为16,加载因子为0.75的数组⑵添加元素时,方法会根据元素的哈希值跟数组的长度计算出应存入的位置⑶判断当前位置是否有元素如果没有元素则直接存入;如果有元素则会通过equals方法比较元素属性值是否一样,一样的话表示元素重复,不存;不一样的话存入数组,形成链表细节:当链表长度超过8且数组长度大于等于64时,链表会自动转换为红黑树,从而提高查找效率LinkedHashSet是HashSet的子类,其完全继承了父类中的方法。

m0_74808313的博客 1317

Java utgard连接OPC问题记录

怎么开启是个问题, 是在引入openscada的jar包里的Sever类中修改,这就犯难了, 其实没必要, 只要在自己项目下创建与openscada中Server类相同的路径,并复制Server过去改就行了, 项目会优先使用本地类,像下面这样。奇迹发生了,0x00000005解决. 注: 我的安全补丁编码跟网上查到的并不一样, 所以最初没有删,后来全都删了就好了,这个编码规则咱也不知道.安全日志中记录用户登录行为, OPC通信需要使用Windows系统用户进行登录, 如果用户名密码错误这里会有相关记录.

wangxin1949的博客 2840

k8s重装1.28.2+calico+踩坑收集+InPlacePodVerticalScaling

它提供了从镜像构建(通过 Dockerfile)、镜像管理(上传、下载、存储等)、容器创建、运行、网络配置(可以为容器分配自定义的网络,如 bridge 网络、host 网络等)到容器编排(通过 Docker Compose 可以简单地编排多个容器的启动和关联关系)等一整套完整的解决方案。它的核心功能是启动和管理容器的生命周期。sudo apt update这个可以经常用,是来更新软件包的,它不下载,所以没风险,但是经常会报错,别问,问就是某种强大的力量,所以用镜像或者代理或者巴拉巴拉。

SsjjsS2019的博客 2553

单列java_单例 (JAVA)

java中单例模式是一种常见的设计模式,以下是它的特点:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例第一种(懒汉,线程不安全):1publicclassSingleton{2privatestaticSingletoninstance;3privateSingleton(){}4publicstaticSin...

weixin_35505629的博客 277

Claude Code教程(二) | Claude Code 核心信息与使用指南

Claude Code 核心信息与使用指南

qq_20236937的博客 2184

java设计模式--单列模式

java设计模式--单列模式 单列模式定义:确保一个类只有一个实例,并提供一个全局访问点。 下面是几种实现单列模式的Demo,每个Demo都有自己的优缺点: Demo1: /** * 单列模式需要满足下面三个条件: * 1.私有的构造函数 * 2.私有的引用变量 * 3.公开的静态方法(唯一获取该类单个实例的地方) * * @author Administrato

JAVA之迷 1041

Oracle ERP EBS R12 GL总帐业务方案 系统操作

本文档是Oracle ERP系统的总账管理模块使用手册,主要包含以下内容:1.系统架构设计,详细介绍多组织架构、会计科目设置等核心概念;2.总账日常操作流程,包括凭证录入、审核、过账等全流程管理;3.特殊业务处理,涵盖预算控制、内部往来、合并报表等专项功能;4.期末处理,说明月结、年结的操作步骤;5.系统设置指南,提供会计科目表、权限控制等配置说明;6.附录包含各业务模块的分录示例和系统操作图标说明。本手册适用于财务人员学习和使用Oracle ERP总账系统,重点讲解系统功能要点和实操步骤。

anpeng2019的博客 1888

科研级YOLO26下采样革新:ContextGuided模块赋能,让特征降维兼具上下文感知的实战指南

在文件夹下新建,将上述类的代码写入其中。这一步是为了让YOLO26的代码架构能识别我们的自定义下采样模块。

LXY_LOVE36的博客 101

java设计模式——单列模式

单列模式的设计类型属于创建型模式,它提供了一种创建对象的最佳方式,是java所有设计模式中最简单的一种。 使用单列模式进行类设计的时候必须要注意三点: 1,单列类只能拥有一个实例。 2,单列类必须自己创建自己的唯一实例。 3,单列类必须给其他对象提供它自己的唯一实例。 运用了单列模式的单列类,在整个系统中只有唯一的一个实例,并且在单列类中必须有个方法是可以被访问的,而且可以让其他需要调用

dbenYZF的博客 570

【GEOS-Chem模拟教程第二期上】生物质燃烧排放 GFED4 数据配置

生物质燃烧排放 GFED4 数据配置

WW、forever的博客 1301

Java设计模式--单列模式

一、简介 1.1 使用场景 1.2 优点 1.3 缺点 二、示例 2.1 懒汉模式 线程不安全,延迟初始化,严格意义上不是不是单例模式 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getIns...

书香水墨 559

WINCC7.3破解文件

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java常用设计模式之单列模式的创建

单列模式就是这个类只允许有一个对象,单列模式又分懒汉式和饿汉式,下面我们通过代码来看看懒汉式和饿汉式的区别: 1.懒汉式 public class SingletonLazy { // volatile:将singleton设置为可见性(每个线程都只能从主内存获取singleton) private static volatile SingletonLazy singlet...

230

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java设计模式之单列模式

  个人总结了下单列模式,如有不到之处还望多多指教。  单列模式是开发和面试过程中常会被问到的设计模式,单列模式用在设计一些工具类的时候可能会被频繁调用时。比如说一个网站统计在线人数,把一个计数器存放在内存或者数据库中,当有人登陆的时候取出来加一再放回去,有人退出登陆的时候取出来减一再放回去,但是当有两个人同时登陆的时候,会同时取出计数器,同时加一,同时放回去,这样的话数据就会错误,所以需要一个全...

Warren_one的博客 524

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JAVA 设计模式 之 单列模式

1.什么是单列模式   说简单点就是确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例   比如:线程池、日志对象 这些都是被设计成单列 2.单列模式的特点   -有且只有一个实例   -必须自己创建自己唯一的实例   -必须给其他所有的对象提供这一实例   -单列模式保证全局对象的唯一性 3.线程安全问题   在使用单例对象的时候,要注意单例对象内的实...

dfe13293的博客 260

Java 设计模式 单列模式

1.使用JVM实现保证线程安全 public class Singleton { //私有构造方法 private Singleton(){} //全局访问接口 public static Singleton getInst...

chuaichi7065的博客 134

java单列模式简单_JAVA 设计模式 之 单列模式

1.什么是单列模式说简单点就是确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例比如:线程池、日志对象 这些都是被设计成单列2.单列模式的特点-有且只有一个实例-必须自己创建自己唯一的实例-必须给其他所有的对象提供这一实例-单列模式保证全局对象的唯一性3.线程安全问题在使用单例对象的时候,要注意单例对象内的实例变量是会被多线程共享的,推荐使用无状态的对象,不会因为多个线程的交替调度...

weixin_33281416的博客 165

Java最简单设计模式之单列模式

单列模式之饥汉模式、饱汉模式、双重锁模式 我们经常用到的Java模式当中,经常会用到也比较简单的模式就是单列模式了,当系统设计中只需要创建一个实例的对象时。就会选用单列模式。 饱汉模式 饱汉模式顾名思义就是已经饱了不着急了,在需要的时候才被创建使用,不会早早的创建,优点是不用的时候不占用内存,缺点是线程不安全的,因为当多个线程同时访问时就会实例化多个对象。所以有了双重锁对这个模式进行改进。 pub...

请 端正你的态度的博客 215

java设计模式之单列模式(Singleton)

简介 本篇只是简单介绍单列模式,主要是让初学者理解单列模式,各种加锁、多实现、业务场景待以后补充。

qq_39724895的博客 252

JAVA基础——设计模式之单列模式

一:单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。 单例设计模式的特点: 单例类只能有一个实例 单例必须创建对象 单例类需要对外提供该对象 核心知识点如下: 将采用单例设计模式的类的构造方法私有化(采用private修饰)。 在...

weixin_30278311的博客 100

Java设计模式之单列模式

简言单列模式:单一,也就是说一个类只能有一个对象。就类似于有些软件只能打开一次,当需要保证一个对象在内存中的唯一性时,就需要引入单列模式。实现步骤创建单列模式分三步操作:1.将构造函数私有化2.在类中创建一个本类对象3.提供一个公有的接口来返回创建的类相关说明我们访问类里面的数据时,分两种情况:1.通过实例化对象,然后通过对象的引用“.”出方法或属性。2.通过类名“.”调用类里面静态的方法或属性。...

Always`的博客 501

java 设计模式-单列模式

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

u014223587的专栏 318
上一篇: Android主流插件化
下一篇: TCP/I三次握手四次挥手
Clarence_zsp
博客等级 码龄11年 12粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值