静态内部类实现单例模式及其线程安全相关原理
实现方式
public class SingleTonInstance {private SingleTonInstance(){};public static SingleTonInstance getInstance(){return SingleTonHolder.sInstance;}private static class SingleTonHolder{private static final SingleTonInstance sInstance = new SingleTonInstance();}...
}
懒加载
程序运行时外部类会被加载到内存,而静态内部类不会加载,只有当getInstance方法被调用时才加载SingleTonHolder并生成外部类SingleTonInstance的实例对象sInstance 。
单例
由于sInstance是静态的,程序中仅有一个实例,保证了单例。
线程安全
加载SingleTonHolder类时,是调用ClassLoader的loadClass方法,最终加载类的方法中其实是采用synchronize加锁的,因为sInstance是该类成员变量也是在类加载方法中初始化的,所以保证了线程安全。
protected Class<?> loadClassOrNull(String cn, boolean resolve) {synchronized (getClassLoadingLock(cn)) {// check if already loadedClass<?> c = findLoadedClass(cn);return c;}
静态内部类实现单例模式及其线程安全相关原理相关推荐
- 【JVM】为什么静态内部类实现单例模式是线程安全?
首先给出代码: //基于类初始化的线程安全的单例 class SingleTon4{private SingleTon4(){} private static class InnerClass{pri ...
- 静态内部类的单例模式如何保证线程安全
一,单例模式有6种实现方式: 1.懒汉式: 2.懒汉式-加锁: 3.双重检验锁: 4.饿汉式: 5.静态内部类: 6.枚举: 1.懒汉式: public class Singleton { //私有的 ...
- JAVA设计模式-单例模式(Singleton)线程安全与效率
一,前言 单例模式详细大家都已经非常熟悉了,在文章单例模式的八种写法比较中,对单例模式的概念以及使用场景都做了很不错的说明.请在阅读本文之前,阅读一下这篇文章,因为本文就是按照这篇文章中的八种单例模式 ...
- Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么
面试官: Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么 心理分析:该问题很难被考到,但是如果一旦问到,100%会回答不上来.开发者很难注意到一个主线程的四循环居然没有阻塞住主线程 ...
- 腾讯Android面试:Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么
面试官: Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么 心理分析:该问题很难被考到,但是如果一旦问到,100%会回答不上来.开发者很难注意到一个主线程的四循环居然没有阻塞住主线程 ...
- 内部类大展身手——— 静态内部类实现单例模式
提到单例模式,如下代码首当其冲: public class Singleton {private static Singleton instance;private Singleton (){}pub ...
- python3 线程池源码解析_5分钟看懂系列:Python 线程池原理及实现
概述 传统多线程方案会使用"即时创建, 即时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器 ...
- Java多线程闲聊(四):阻塞队列与线程池原理
Java多线程闲聊(四)-阻塞队列与线程池原理 前言 复用永远是人们永恒的主题,这能让我们更好地避免重复制造轮子. 说到多线程,果然还是绕不开线程池,那就来聊聊吧. 人们往往相信,世界是存在一些规律的 ...
- Java 并发编程——Executor框架和线程池原理
Java 并发编程系列文章 Java 并发基础--线程安全性 Java 并发编程--Callable+Future+FutureTask java 并发编程--Thread 源码重新学习 java并发 ...
最新文章
- 无需3D运动数据训练,最新人体姿势估计方法达到SOTA | CVPR 2020
- 【HTTP】图解HTTPS
- Miscellaneous Character Drivers
- kibana操作elasticsearch:新增数据(自定义id)
- mhd格式三维图像显示_给你的家乡做个三维地图模型,满满的成就感,快来学习下...
- abap 帮助文档 中文_谷歌的软件工程 读书笔记(十)文档
- 图解TCPIP-IP 网际协议-路由控制
- 双重检查锁定及单例模式
- ELK下filebeat性能调优
- tensorflow之truncated_normal
- 源代码仓库选择-gitlab
- 密码学系列 - 双线性对
- 软件测试书籍有哪些_软件测试书籍推荐
- 子群的陪集-》群的拉格朗日定理
- 高景一号01星遥感影像解译数据分辨率是多少
- 安卓怎么转移到iphone_如何将联系人从iPhone转移到另一部电话
- 极域电子教室学生机房管理助手(好好上课)教程
- 利用cesium模拟台风移动路径——以利奇马台风为例
- 头像哟(^U^)ノ~YO
- git和coding 基本操作
热门文章
- unity3d打包到安卓平台报错BuildPlayerWindow+BuildMethodEXception:x error(新手第一坑)
- 钉钉PC端聊天中分享的网址生成卡片
- 2020-10-19。小白自学:飞机大战源码改造。(新手入门,学习总结。从零开始,步步为营。不同版本,独立运行。完整代码,感谢原著。)
- python修炼之道_Pythonic:Python 修炼之道
- 对 FaaS 的基础认识
- Android Camera1-Camera2-CameraView和CameraX使用
- c语言程序设计地位和作用,《C语言程序设计》教学实践
- 点对点协议PPP的特点
- php 删除 确认,js确认删除方法 js删除确认提示框
- unity Ignis - Interactive Fire(完美模拟:森林火灾、草原火灾、建筑火灾)