JAVA中的单例设计(Singleton)模式

github创建账号第一步始终出错 github创建账号总结:第一次注册GitHub,填好用户名邮箱密码后进入下一步就卡在哪里,上面还提示Unable to verify your captcha response等,进入网址的解决办法以及下载其他的浏览器也无法解决,用手机浏览器抱着试一试的心态竟然成功了,分享给大家。手机下载谷歌浏览器,进入GitHub正常注册,能向下继续,邮箱验证完以后再用电脑登陆就ok啦 阅读详情

一、单例模式有以下特点:

1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

 

二、懒汉式

//懒汉式单例类.在第一次调用的时候实例化自己   

 public class Singleton {  

    private Singleton() {}  

     private static Singleton single=null;  

     //静态工厂方法   

     public static Singleton getInstance() {  

          if (single == null) {    

             single = new Singleton();  

         }    

        return single;  

    }  

}  

Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问

 

1、在getInstance方法上加同步

·  public static synchronized Singleton getInstance() {  

·           if (single == null) {    

·               single = new Singleton();  

·           }    

·          return single;  

·  } 

 

 

2、双重检查锁定

·  public static Singleton getInstance() {  

·          if (singleton == null) {    

·              synchronized (Singleton.class) {    

·                 if (singleton == null) {    

·                    singleton = new Singleton();   

·                 }    

·              }    

·          }    

·          return singleton;   

·      } 

 

 

3、静态内部类

·  public class Singleton {    

·      private static class LazyHolder {    

·         private static final Singleton INSTANCE = new Singleton();    

·      }    

·      private Singleton (){}    

·      public static final Singleton getInstance() {    

·         return LazyHolder.INSTANCE;    

·      }    

·  } 

 

三、饿汉式单例

 //饿汉式单例类.在类初始化时,已经自行实例化   

 public class Singleton1 {  

     private Singleton1() {}  

     private static final Singleton1 single = new Singleton1();  

    //静态工厂方法   

     public static Singleton1 getInstance() {  

         return single;  

    }  

 }  

饿汉式的特点:饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。

饿汉式和懒汉式区别

从名字上来说,饿汉和懒汉,

饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,

而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。

另外从以下两点再区分以下这两种方式:

1、线程安全:

饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题,

懒汉式本身是非线程安全的,为了实现线程安全有几种写法,分别是上面的1、2、3,这三种实现在资源加载和性能方面有些区别。

2、资源加载和性能:

饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成,

而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。

至于1、2、3这三种实现又有些区别,

第1种,在方法调用上加了同步,虽然线程安全了,但是每次都要同步,会影响性能,毕竟99%的情况下是不需要同步的,

第2种,在getInstance中做了两次null检查,确保了只有第一次调用单例的时候才会做同步,这样也是线程安全的,同时避免了每次都同步的性能损耗

第3种,利用了classloader的机制来保证初始化instance时只有一个线程,所以也是线程安全的,同时没有性能损耗,所以一般我倾向于使用这一种。

 

什么是线程安全?

如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

或者说:一个类或者程序所提供的接口对于线程来说是原子操作,或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题,那就是线程安全的。

A133在Android13上适配百兆以太网 NOTE] 【技术支持问题】问题背景/平台。 阅读详情

相关推荐

保姆级教程:用Java和HslCommunication库搞定三菱PLC数据读写(附完整代码)

本文提供了一份详细的Java与三菱PLC通信教程,通过HslCommunication库实现高效数据读写。内容涵盖环境配置、通信模式选择、数据类型操作、异常处理及性能优化,并附有完整代码示例,帮助开发者快速掌握工业自动化中的PLC数据交互技术。

weixin_28731223的博客 227

JAVA设计模式之单例模式

本文继续介绍23种设计模式系列之单例模式。 概念:   java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。   单例模式有以下特点:   1、单例类只能有一个实例。   2、单例类必须自己创建自己的唯一实例。   3、单例类必须给所有其他对象提供这一实例。  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例...

一个本科小生的奋斗史 101万+

浅谈python反序列化漏洞

0x01 python序列化与反序列化 Python 的序列化和反序列化是将一个类对象向字节流转化从而进行存储和传输,然后使用的时候再将字节流转化回原始的对象的一个过程。python中的序列化操作是通过pickle模块,而该模块主要包含l dumps将dict转化为str格式,loads将str格式转化为dict格式。 dump和load与文件操作结合起来, pickle.dump(obj, f...

Lethe's Blog 3220

java设计模式-单例模式(Singleton)

java设计模式-单例模式(Singleton)

听海边涛声 1954

Ansys Zemax | 公差分析中的补偿器优化:如何提升系统良率?

本文深入探讨了在Ansys Zemax公差分析中如何有效设置与优化补偿器以提升系统良率。文章指出,补偿器是连接理想设计与现实生产的关键,通过模拟实际装配中的调整(如后焦距),能显著改善公差分析的“悲观”预测。详细介绍了补偿器的添加方法、多补偿器策略、评价函数设计以及通过灵敏度分析和蒙特卡洛档案优化补偿效果,旨在帮助光学工程师制定更符合生产实际的公差策略,从而有效提升产品良率。

weixin_28419039的博客 619

【机械视觉】Halcon—【二、Halcon算子全面介绍(超详细版)】

Halcon 的算子(operators)按照功能被系统性地划分为多个类别,官方文档中目前(Halcon 22.11 版本)共有 19 个主分类,每个主分类下还有若干子分类。 本人在此对这19个分类的常用核心算子进行了一系列的总结,且本人在文章最后还总结了一些案例经验。 注意: ​​​​​​​跨分类调用:某些算子可能在多个分类中,但官方文档中会明确其主分类。 例如: read_image(文件操作)常被其他分类(如图像处理)的示例调用,但其核心功能是文件读取。

qq_3517289697的博客 3913

java单例模式详解

java几种单例模式:1、通过静态内部类实现2、饿汉式3、懒汉式

喵酱 1797

操作系统笔记(含王道计算机考研——操作系统课件)

操作系统(OS) 笔记根据B站王道计算机考研——操作系统视频整理所得,视频链接:https://b23.tv/0I2qex 视频中所用课件:链接:https://pan.baidu.com/s/101bFWm0Tv0emNpEneidYPA 提取码:y3dd 1.计算机系统概述 1.简介 什么是操作系统? 操作系统(Operating Ststem, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是

拧发条鸟的博客 6万+

Java单例模式(Singleton)

java单例模式

xiaomeng2013的博客 1816

SpringBoot DDoS防护:限流与验证全面指南

SpringBoot应用DDoS防护摘要 本文介绍了SpringBoot应用防护DDoS攻击的方案。DDoS攻击通过分布式请求耗尽服务器资源,导致服务不可用、成本激增等风险。防护需遵循分层防御、弹性设计等原则。 核心方案包括: 令牌桶限流:使用Guava RateLimiter控制请求速率 滑动窗口算法:通过Redis+Lua实现精确的分布式限流 微服务集成:利用Spring Cloud Gateway统一管理API限流 实施建议: 关键接口默认添加限流保护 监控系统实时警报异常流量 结合WAF等多层防护措

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 2486

【Claude】Extra inputs are not permitted 错误:代理剥离 Beta 标头的解决方案 bug报错已解决

深入分析Claude Code Extra inputs are not permitted 400错误的技术原理,解析代理剥离Beta标头的根因与多种修复方案。

一键难忘的博客 145

Java单例模式详解--七种单例模式实现+单例安全+实际应用场景

单例模式是一种创建型设计模式,它保证了一个类只有一个实例,并且提供了一个全局访问点。本文将介绍单例模式的定义、原理、优缺点、实现方式和应用场景。

weixin_44186179的博客 2450

“守望先锋”网络同步分析

守望先锋”(Overwatch)是一款由暴雪娱乐开发的团队基础第一人称射击游戏(FPS),于2016年正式发布。游戏以其独特的角色设计、丰富的游戏模式和高度的团队合作性而受到广泛欢迎。类型:第一人称射击(FPS)/多人在线战斗竞技场(MOBA元素)平台玩家人数:每场比赛由两个六人队伍组成,共12名玩家。客户端/服务器模型:在这种模型中,客户端负责处理用户输入和表现逻辑,而服务器则负责游戏的核心逻辑和状态管理。客户端与服务器之间通过网络进行通信,确保游戏状态的一致性。强同步机制。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 426

Java 设计模式 Singleton 单例 模式

Java 设计模式 Singleton 单例 模式 Singleton模式用于只生产一个实例。 涉及到的角色 Singleton:负责生产一个实例,角色中有一个总是返回唯一实例的static方法。 /** * 单例 * @author 托马斯小火车喷雾又喷烟 * */ public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { Sy.

5万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VC中sqlite的使用

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

java中的单例(Singleton)设计模式,详解

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。单例模式的两种实现方式包括饿汉式与懒汉式。

共同学习,共同成长 1658

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java面向对象--单例(Singleton)设计模式和main方法

本篇博客是衔接上篇博客《Java面向对象–关键字(super、static、final)》中static关键字的应用拓展,具体介绍单例(Singleton)设计模式和main方法的使用...

༺ཌ༈君纤༈ད༻ 267

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设计模式:单例Singleton

单例(基于多线程的编程) Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 在项目的很多地方都会用到它,比如说数据库的链接。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。 实现方法 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类...

离开屏幕的光,哪盏灯照亮你的孤独? 351

singleton java 设计模式_Java设计模式:Singleton(单例)模式

概念定义Singleton(单例)模式是指在程序运行期间, 某些类只实例化一次,创建一个全局唯一对象。因此,单例类只能有一个实例,且必须自己创建自己的这个唯一实例,并对外提供访问该实例的方式。单例模式主要是为了避免创建多个实例造成的资源浪费,以及多个实例多次调用容易导致结果出现不一致等问题。例如,一个系统只能有一个窗口管理器或文件系统,一个程序只需要一份全局配置信息。应用场景资源共享的情况下,避免...

weixin_30529479的博客 174

JAVA设计模式——单例(Singleton)模式

 一、单例(Singleton)模式  单例模式的要点有三个:一是某个类只能有一个实例,二是它必需自行创建这个实例,三是它必须向整个系统自行提供这个实例.二、饿汉式单例类饿汉式单例类是一个典型的单例类,下面是一个它的实现:/* * 饿汉式单例类,不能被继承 */public class HungrySingleton {    /*      * Sin

melin520的专栏 1972

Java设计模式透析之 —— 单例(Singleton)

写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你分析数据。但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至像findbugs等代码检查工具还会认为使用System.out.println()是一个bug。 为什么作为Java新手神器的System.out.println(),到了真正项目开发当中会被唾弃呢?其实只要细细分析,你就会发现它的很多弊端。比如不可控制,所有的日志都会在项目上线后照常打印,从而降低运行效率;又或

郭霖的专栏 3万+

转载Java设计模式之单例Singleton模式

原文地址:https://blog.youkuaiyun.com/chenweiaiyanyan/article/details/78049079 概述 单例模式(SingleTon)属于创建型模式,确保某个类只有一个实例,是最常见的设计模式之一。如日志对象,Android系统下面的XXXManager,在java语言下单例有如下三个特点: 1. 一个虚拟机单例类只能有一个实例 2. 单例类必须自己创...

meihao1203dick的博客 163

Singleton(单例)设计模式 by java

Singleton的应用很普及,特别是在java的web项目中。比例项目的一些请求外部平台的地址、商户号或项目的图片访问路径、模块生成的路径等等。接下看看示例代码你就明白了。 /** * * @description Singleton(单例) * since this isn't inherited from a cloneable * base class and clone...

developerFBI的专栏 251

[java]设计模式之singleton(单例)

在日常工作中,有很多对象,我们只需要一个。比如:线程池, 缓存,注册表等。如果制造出多个实例,就会导致许多问题,如程序行为异常,资源使用过量等。这就需要对对象的构建进行控制,使其只能产生一个对象。这就是本篇要讲的设计模式——singleton(单例)。 首先给出单例模式的定义:确保只有一个类只有一个实例,并提供一个全局访问点。 那么,要如何实现单例模式,使得一个类只能产生一个对象呢?请看下面的

追梦船的专栏 932

【java设计模式】之 单例(Singleton)模式

原文链接:http://www.itcodai.com/blog/29 1. 单例模式的定义         单例模式(Singleton Pattern)是一个比较简单的模式,其原始定义如下:Ensure a class has only one instance, and provide a global point of access to it. 即确保只有一个实例,而且自行实例化并向...

1万+

java——单例(Singleton)设计模式的理解

概述 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、 以及解决问题的思考方式。 设计模免去我们自己再思考和摸索,就像是经典的棋谱,不同的棋局,我们用不同的棋谱“套路”。 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 实现思路: 若我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为private,这样就不能用new操作符在类的外部产生类的对象了。 但在类内部仍可以

m0_38140207的博客 379

java设计模式】之 单例(Singleton)模式

转载:https://blog.youkuaiyun.com/eson_15/article/details/51203993 1. 单例模式的定义         单例模式(Singleton Pattern)是一个比较简单的模式,其原始定义如下:Ensure a class has only one instance, and provide a global point of access to it...

w199810的博客 237
上一篇: 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
下一篇: 2017年最好的JavaScript库
CapsLockWY
博客等级 码龄9年 9粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值