单例模式:静态内部类实现的单例模式是懒加载且线程安全的
由于加载一个类时,其内部类不会同时被加载。一个类被加载,当且仅当其某个静态成员(静态域、构造器、静态方法等)被调用时发生。因此使用静态内部类实现的单例模式是懒加载的且线程安全。
一、代码
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
单例模式:静态内部类实现的单例模式是懒加载且线程安全的相关推荐
- java懒加载设计模式_java设计模式——单例模式
整理一下设计模式的个人理解. 描述 单例模式是java中比较常见的一种设计模式,顾名思义为一个类只能创建一个实例,多用于全局对象,如:配置的加载,spring bean加载各种配置(spring容器所 ...
- Java 单例模式:懒加载(延迟加载)和即时加载
Java 单例模式:懒加载(延迟加载)和即时加载 引言 在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制(或懒加载.延时加载),也就是说只有当使用到这个实例的时候才会创 ...
- 懒加载方式下的单例模式
一般的,我们编写单例模式往往直接在单例引用的时候,即把实例生成,采用private final static 的成员变量直接初始化掉,这种方法能适应大部分的场景,但有时候本单例模式可能还处理其他业务, ...
- android懒加载单实例,【 Android 10 设计模式 】系列 -- 单例
前言 由于源码分析的代码量比较大,大部分博客网站的内容显示页面都比较窄,显示出来的效果都异常丑陋,所以您也可以直接查看 < Thinking in Android > 来阅读这边文章,希望 ...
- Spring系列(五):@Lazy懒加载注解用法介绍
今天给大家介绍@Lazy懒加载注解用法,希望对大家能有所帮助! 1.@Lazy 懒加载注解的概念 SpringIoC容器会在启动的时候实例化所有单实例 bean .如果我们想要实现 Spring 在启 ...
- java 懒加载模式_JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载
我写的程序员面试系列文章 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Jav ...
- [译]带你揭开Kotlin中属性代理和懒加载语法糖衣
翻译说明: 原标题: How Kotlin's delegated properties and lazy-initialization work 原文地址: https://medium.com/t ...
- Spring框架,IOC,DI,AOP,单例多例,懒加载
文章目录 1.Spring 2.IOC 2.1 什么是IOC 2.2 xml配置文件管理对象 2.3 全注解的方式管理对象 3.Spring创建对象-工厂模式(必会内容) 4.单例与多例 4.1@Sc ...
- java中什么叫懒加载_java懒加载的原理
聊一下以下名词.概念或用法:lazy.lazy="extra".inverse.fetch.fetch="join".fetch=" subselec ...
最新文章
- 顺序栈初始化,判空,进栈,出栈,打印
- Python零碎知识(3):对文件的基本操作
- 区块链大热,和出版业如何发生关系?
- 实现远程调用_远程过程调用(RPC)是怎么实现的?
- c++系统给baijq分配了空间
- C++控制台简单的用户登录
- vermgr工作笔记002---SVN查看log时报“svn there has been a problem contacting the server”错误
- JHipster中文官网
- FISCO BCOS(十一)——— FISCO BCOS如何查看账户
- 视频水印素材 md5修改
- 六人扑克牌游戏 三先 规则
- CatBoost快速入门
- 关于二叉树的前序、中序、后序三种遍历
- Shell 获取服务器IP地址
- clustalw序列比对_你还在用ClustalW做多序列比对?OUT了
- 一张图帮你看懂 iPhone 6 Plus 的屏幕分辨率
- NCNN+Int8+YOLOv4量化模型和实时推理
- mysql试题百度云_MYSQL练习题及答案
- TCP报文发送的那些事 1
- 手机密码大全及国产贴牌与OEM型号对照表