学习java中的单例模式(Singleton)

javax.inject-1.jar 支持注入,spring ,类别注入,很好用的jar包,还有原码和文档 立即下载

今天也是在学习Android-CleanArchitecture-master的demo(学习这个的框架),在看源码的时候,发现了一个我之前没有看过的引用:import javax.inject.Singleton;。于是googl搜索了一下。


在维基百科有非常简单明了的介绍(官网网址:单例模式),下面把内容复制过来,方便不能看到的同学学习。


维基原文:


单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。


实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。


单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。


构建方式

通常单例模式在Java语言中,有两种构建方式:

  • 懒汉方式。指全局的单例实例在第一次被使用时构建。
  • 饿汉方式。指全局的单例实例在类装载时构建。

例子

在Java语言中,单例模式(饿汉模式)应用的例子如下述代码所示:

  public class Singleton {
    private final static Singleton INSTANCE = new Singleton();
  
    // Private constructor suppresses   
    private Singleton() {}
 
    // default public constructor
    public static Singleton getInstance() {
        return INSTANCE;
    }
  }

在Java编程语言中,单例模式(懒汉模式)应用的例子如下述代码所示 (此种方法只能用在JDK5及以后版本(注意 INSTANCE 被声明为 volatile),之前的版本使用“双重检查锁”会发生非预期行为[1]):

  public class Singleton {
    private static volatile Singleton INSTANCE = null;
  
    // Private constructor suppresses 
    // default public constructor
    private Singleton() {}
  
    //thread safe and performance  promote 
    public static  Singleton getInstance() {
        if(INSTANCE == null){
             synchronized(Singleton.class){
                 //when more than two threads run into the first null check same time, to avoid instanced more than one time, it needs to be checked again.
                 if(INSTANCE == null){ 
                     INSTANCE = new Singleton();
                  }
              } 
        }
        return INSTANCE;
    }
  }

注:还有其他语言的实现版本,目前只黏贴java版本过来。

inject:围绕javax.inject批注的简单Kotlin多平台抽象 注入 围绕注释的简单Kotlin多平台抽象。 这允许在Kotlin通用代码中使用注释,以便特定于平台的注释处理器可以注册它们。 有关该库的更多信息,请参阅的博客文章,该文章在《 Android Weekly》期中有介绍。 该还刊登在Kotlin Weekly期中。 使用图书馆 只需使用提供的注释,就像使用注释一样。 例如,在Kotlin公共代码中的构造函数上使用Inject注释: class MyUseCase @Inject constructor() { .. . } 可用的注释和界面 @Inject @Named("name") @Qualifier @Scope @Singleton Provider<T> 建立图书馆 该库是通过提供的。 签出包以获取最新版本。 资料库 repositories { maven { url = " https://re 立即下载

相关推荐

Linux平台CCS安装配置完整示例

手把手讲解在Linux系统中完成CCS安装与环境配置的全过程,涵盖关键步骤与常见问题解决,是查找ccs安装教程时不可多得的实战指南。

weixin_42601134的博客 514

Java单例模式与依赖注入示例

Java单例模式与依赖注入示例

Leon_Jinhai_Sun的博客 474

Adobe软件非正版弹窗终极解决方案:PS/Ai/PR/AE禁用提示一键清除指南

本文提供了Adobe软件非正版弹窗的终极解决方案,包括PS、Ai、PR、AE等软件的禁用提示一键清除指南。通过专业清理工具和手动修改系统文件的方法,帮助用户彻底解决Adobe弹窗问题,提升使用体验。适用于Windows和Mac系统用户,操作简单高效。

weixin_30872337的博客 5321

@Scope、@Singleton源码翻译

package javax.inject; import java.lang.annotation.Target; import java.lang.annotation.Retention; import java.lang.annotation.Documented; import static java.lang.annotation.RetentionPolicy.RUNTIME; im

爱我所爱0505 638

自动驾驶必备:5分钟搞懂gPTP如何实现μs级时间同步(附开源代码)

本文深入解析了gPTP协议在自动驾驶系统中实现微秒级时间同步的核心机制与工程实践。针对多传感器融合与跨域协同的严苛需求,文章拆解了gPTP的频率同步、对等延迟测量与时间偏移校正三步流程,并提供了基于linuxptp和AVnu gPTP两大开源代码库的实战配置指南与性能评估方法,助力开发者构建高精度、高可靠的车载时间同步网络。

weixin_29211309的博客 167

脑电分析:为什么大脑信号会“变同步”?——事件相关同步化与去同步化 (ERS/ERD) 全景解析

脑电分析中的事件相关同步化(ERS)和去同步化(ERD)是研究大脑动态节律的重要方法,反映特定任务下脑电频段能量的变化。ERD表示神经元活动分散(功率下降),提示脑区活跃处理信息;ERS则反映神经元同步(功率增强),常与静息状态相关。本文详解了ERS/ERD的生理机制、计算流程(包括基线校正和功率谱分析),并提供了Python实现示例,展示如何通过Welch法和STFT进行时频分析,生成ERD/ERS热力图。该技术广泛应用于运动想象脑机接口、癫痫检测等领域,为理解大脑功能状态提供了量化工具。

qq_32516809的博客 1395

java程序ioc,Java | ​实现一个简单的 IOC 容器 (一)

实现一个简单的 IOC 容器 (一) 这篇文章主要讲一下如何使用 Java 实现一个简单的 IOC 容器,这里该系列的第一篇,要实现的内容的也相对简单,主要介绍一下 B 依赖 A 这种简单的关系是怎么实现的 Java 依赖注入标准 JSR-330 实现我们常常使用的 Java DI 框架包括 Spring 和 Guice,在 Java 规范中也定义了对依赖注入的基本规范,其就是 JSR-330标准...

weixin_34410975的博客 278

OFDM调制matlab仿真详细代码

MATLAB仿真代码 % ================================================== % 作者: 肆拾伍 % 时间:11/30 2019 % 版本:V3 % =================OFDM仿真参数说明:================ % % 子载波数 carrier_count ---200 % 总符号数 symbol_count ...

肆拾伍的博客 3万+

javax.inject中@Inject、@Named、@Qualifier和@Provider用法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33906657的博客 686

Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现

Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现 目录 Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现 一、简单介绍 二、Car Racing 2D (2D赛车) 游戏内容与操作 三、相关说明 四、游戏代码框架 五、知识点 六、游戏效果预览 七、实现步骤 八、工程源码地址 九、延伸扩展 一、简单介绍 Unity 游戏实例开发集合,使用简单易懂的方式,讲解常见游戏的开发实现过程,方便

仙魁XAN 7702

如何从RHEL 8升级到RHEL 9

Red Hat 于 2022 年 5 月 17 日宣布全面推出 RHEL 9。这是 RHEL(Red Hat Enterprise Linux)的最新版本,它具有许多功能和增强功能。

u012748257的博客 1019

Java里inject_javax.inject中@Inject、@Named、@Qualifier和@Provider用法

@Inject@Inject支持构造函数、方法和字段注解,也可能使用于静态实例成员。可注解成员可以是任意修饰符(private,package-private,protected,public)。注入顺序:构造函数、字段,然后是方法。父类的字段和方法注入优先于子类的字段和方法,同一类中的字段和方法是没有顺序的。@Inject注解的构造函数可以是无参或多个参数的构造函数。@Inject每个类中最多注...

weixin_36108913的博客 1685

Vibe Writing 手把手教程:Obsidian + Claudian + Skill

本文介绍了Vibe Writing的实操教程,主要使用Obsidian+Claudian+Skill组合。教程包含工具安装配置(Obsidian、Claudian插件)、核心工作流(选题-调研-写作-发布)和效果对比。重点展示了Claude Code生成的文本更具"人味"和场景感,优于其他AI工具。作者强调工具只是辅助,内容灵魂仍需个人思考积累。附有公众号排版和全网发布工具推荐,以及自动配图生成方案。

298

《学习Java设计模式之单例模式(Singleton Pattern)》

单例模式(Singleton Pattern) 1、单例模式的概念 单例模式 又叫做 单态模式 或者 单件模式 。 单例模式 是指 保证JVM中一个类仅有一个实例 ,并提供一个访问它的全局访问点。 单例模式 中的 单例 通常用来代表那些本质上 具有唯一性的系统组件(或者叫做资源)。比如文件...

138

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VB摄像头监控

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

《Java与模式》学习笔记之六----单例模式(Singleton Pattern)

 作为对象的创建模式[GOF95],单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类.  Singleton模式是设计模式中最为简单,最为常见,最容易实现,也是最应该熟悉和掌握的模式.在公司招聘时单例模式是考的最多的模式.问题:如果你的系统中要创建一个唯一的对象, 请使用单例模式. 如数据库连接, 打印机的实例等.单例类分为三种:饿汉式,懒

我的家 1991

假人有限元模型

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

Java 单根模式(Singleton Pattern) 学习

刚开始接触Singleton pattern,用以下代码实现:Code 1public class Config { //Log4j instance private static Logger logger = Logger.getLogger(Config.class); // Class member, read config from properties fi

cloud的技术积累 1265

Java基础学习记录之单例模式(singleton)

1.单例模式:java中的解释是:一个类有且仅有一个实例,并且自行实例化向整个系统提供;是一种比较常见的设计模式。    优点:1,单例模式会阻止其他对象实例化自己对象的副本,进而确保了只有一个实例对象,让所有的对象都访问唯一实例;              2,单例模式控制其实例化过程,所以类可以灵活更改其实例化过程。    缺点:如果是懒汉式,每次对象请求引用时都要检查是否存在类的实例,会增加...

arvin_zhang_的博客 257

java中单根_Java 单根模式(Singleton Pattern) 学习

刚开始接触Singleton pattern,用以下代码实现:Code 1public class Config {//Log4j instanceprivate static Logger logger = Logger.getLogger(Config.class);// Class member, read config from properties fileprivate Propert...

weixin_34447182的博客 212

Java 学习1--单例模式(Singleton)

概念: 在Java应用程序中,一个类Class只有一个实例存在   Singleton介绍: 1.介绍:也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他

a3521553a的博客 286

7种创建型模式 之4 SINGLETON 单例模式 《Java与模式》学习笔记

7种创建型模式 之4 SINGLETON 单例模式 《Java与模式》学习笔记 4、SINGLETON 单例模式 :  (1) Eager 饿汉模式 : 仅适用于 Java  ;  public class EagerSingleton {     //类被加载时,静态变量就被初始化     private static EagerSingleton ourIn

blogdown的专栏 325

java设计模式学习系列之一:单例模式(Singleton)

单例模式(Singleton)    1.介绍:也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境

Java之道 2万+

Java 基础学习之构造方法私有化(单例模式 Singleton)

单例模式 ( Singleton )实例代码: package self.learn.privateconstructor; public class Singleton { // 在内部产生本类的实例化对象,将属性封装 private static Singleton instance = new Singleton(); private Singleton() { ...

IT小白的博客 386
上一篇: Java类与Json的转换
下一篇: java依赖注入的学习
question00
博客等级 码龄16年 4粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值