由于加载一个类时,其内部类不会同时被加载。一个类被加载,当且仅当其某个静态成员(静态域、构造器、静态方法等)被调用时发生。因此使用静态内部类实现的单例模式是懒加载的且线程安全。

一、代码

public class UserSingleton {/** 私有化构造器 */private UserSingleton() {}/** 对外提供公共的访问方法 */public static UserSingleton getInstance() {return UserSingletonHolder.INSTANCE;}/** 写一个静态内部类,里面实例化外部类 */private static class UserSingletonHolder {private static final UserSingleton INSTANCE = new UserSingleton();}
}

二、小结

(1)为什么这样实现就是单例的?

因为这个类的实例化是靠静态内部类的静态常量实例化的。

INSTANCE 是常量,因此只能赋值一次;它还是静态的,因此随着内部类一起加载。

(2)这样实现有什么好处?

我记得以前接触的懒汉式的代码好像有线程安全问题,需要加同步锁才能解决。

采用静态内部类实现的代码也是懒加载的,只有第一次使用这个单例的实例的时候才加载;同时不会有线程安全问题

原文链接:https://www.cnblogs.com/zeng1994/p/7397637.html

单例模式:静态内部类实现的单例模式是懒加载且线程安全的相关推荐

  1. java懒加载设计模式_java设计模式——单例模式

    整理一下设计模式的个人理解. 描述 单例模式是java中比较常见的一种设计模式,顾名思义为一个类只能创建一个实例,多用于全局对象,如:配置的加载,spring bean加载各种配置(spring容器所 ...

  2. Java 单例模式:懒加载(延迟加载)和即时加载

    Java 单例模式:懒加载(延迟加载)和即时加载 引言 在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制(或懒加载.延时加载),也就是说只有当使用到这个实例的时候才会创 ...

  3. 懒加载方式下的单例模式

    一般的,我们编写单例模式往往直接在单例引用的时候,即把实例生成,采用private final static 的成员变量直接初始化掉,这种方法能适应大部分的场景,但有时候本单例模式可能还处理其他业务, ...

  4. android懒加载单实例,【 Android 10 设计模式 】系列 -- 单例

    前言 由于源码分析的代码量比较大,大部分博客网站的内容显示页面都比较窄,显示出来的效果都异常丑陋,所以您也可以直接查看 < Thinking in Android > 来阅读这边文章,希望 ...

  5. Spring系列(五):@Lazy懒加载注解用法介绍

    今天给大家介绍@Lazy懒加载注解用法,希望对大家能有所帮助! 1.@Lazy 懒加载注解的概念 SpringIoC容器会在启动的时候实例化所有单实例 bean .如果我们想要实现 Spring 在启 ...

  6. java 懒加载模式_JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

    我写的程序员面试系列文章 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Jav ...

  7. [译]带你揭开Kotlin中属性代理和懒加载语法糖衣

    翻译说明: 原标题: How Kotlin's delegated properties and lazy-initialization work 原文地址: https://medium.com/t ...

  8. Spring框架,IOC,DI,AOP,单例多例,懒加载

    文章目录 1.Spring 2.IOC 2.1 什么是IOC 2.2 xml配置文件管理对象 2.3 全注解的方式管理对象 3.Spring创建对象-工厂模式(必会内容) 4.单例与多例 4.1@Sc ...

  9. java中什么叫懒加载_java懒加载的原理

    聊一下以下名词.概念或用法:lazy.lazy="extra".inverse.fetch.fetch="join".fetch=" subselec ...

最新文章

  1. 顺序栈初始化,判空,进栈,出栈,打印
  2. Python零碎知识(3):对文件的基本操作
  3. 区块链大热,和出版业如何发生关系?
  4. 实现远程调用_远程过程调用(RPC)是怎么实现的?
  5. c++系统给baijq分配了空间
  6. C++控制台简单的用户登录
  7. vermgr工作笔记002---SVN查看log时报“svn there has been a problem contacting the server”错误
  8. JHipster中文官网
  9. FISCO BCOS(十一)——— FISCO BCOS如何查看账户
  10. 视频水印素材 md5修改
  11. 六人扑克牌游戏 三先 规则
  12. CatBoost快速入门
  13. 关于二叉树的前序、中序、后序三种遍历
  14. Shell 获取服务器IP地址
  15. clustalw序列比对_你还在用ClustalW做多序列比对?OUT了
  16. 一张图帮你看懂 iPhone 6 Plus 的屏幕分辨率
  17. NCNN+Int8+YOLOv4量化模型和实时推理
  18. mysql试题百度云_MYSQL练习题及答案
  19. TCP报文发送的那些事 1
  20. 手机密码大全及国产贴牌与OEM型号对照表

热门文章

  1. 华为WATCH Buds耳机升级失败的解决方案
  2. Characteristics of Software Quality 软件质量的特性
  3. Android 通讯录存入手机、电话、邮箱、地址等信息
  4. 人人应该知晓的外国典故
  5. PPP(PPPOE)
  6. 专科毕业的Java菜鸟,只干了这一件事,offer拿到手软!
  7. Java架构之消息队列 (一):消息队列的概述
  8. ipv6免内网穿透使用树莓派4搭建云服务器
  9. MySQL的登录、密码更改
  10. 全云化架构(十一):分布式定时任务框架对比