实现方式

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;}

静态内部类实现单例模式及其线程安全相关原理相关推荐

  1. 【JVM】为什么静态内部类实现单例模式是线程安全?

    首先给出代码: //基于类初始化的线程安全的单例 class SingleTon4{private SingleTon4(){} private static class InnerClass{pri ...

  2. 静态内部类的单例模式如何保证线程安全

    一,单例模式有6种实现方式: 1.懒汉式: 2.懒汉式-加锁: 3.双重检验锁: 4.饿汉式: 5.静态内部类: 6.枚举: 1.懒汉式: public class Singleton { //私有的 ...

  3. JAVA设计模式-单例模式(Singleton)线程安全与效率

    一,前言 单例模式详细大家都已经非常熟悉了,在文章单例模式的八种写法比较中,对单例模式的概念以及使用场景都做了很不错的说明.请在阅读本文之前,阅读一下这篇文章,因为本文就是按照这篇文章中的八种单例模式 ...

  4. Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么

    面试官: Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么 心理分析:该问题很难被考到,但是如果一旦问到,100%会回答不上来.开发者很难注意到一个主线程的四循环居然没有阻塞住主线程 ...

  5. 腾讯Android面试:Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么

    面试官: Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么 心理分析:该问题很难被考到,但是如果一旦问到,100%会回答不上来.开发者很难注意到一个主线程的四循环居然没有阻塞住主线程 ...

  6. 内部类大展身手——— 静态内部类实现单例模式

    提到单例模式,如下代码首当其冲: public class Singleton {private static Singleton instance;private Singleton (){}pub ...

  7. python3 线程池源码解析_5分钟看懂系列:Python 线程池原理及实现

    概述 传统多线程方案会使用"即时创建, 即时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器 ...

  8. Java多线程闲聊(四):阻塞队列与线程池原理

    Java多线程闲聊(四)-阻塞队列与线程池原理 前言 复用永远是人们永恒的主题,这能让我们更好地避免重复制造轮子. 说到多线程,果然还是绕不开线程池,那就来聊聊吧. 人们往往相信,世界是存在一些规律的 ...

  9. Java 并发编程——Executor框架和线程池原理

    Java 并发编程系列文章 Java 并发基础--线程安全性 Java 并发编程--Callable+Future+FutureTask java 并发编程--Thread 源码重新学习 java并发 ...

最新文章

  1. 无需3D运动数据训练,最新人体姿势估计方法达到SOTA | CVPR 2020
  2. 【HTTP】图解HTTPS
  3. Miscellaneous Character Drivers
  4. kibana操作elasticsearch:新增数据(自定义id)
  5. mhd格式三维图像显示_给你的家乡做个三维地图模型,满满的成就感,快来学习下...
  6. abap 帮助文档 中文_谷歌的软件工程 读书笔记(十)文档
  7. 图解TCPIP-IP 网际协议-路由控制
  8. 双重检查锁定及单例模式
  9. ELK下filebeat性能调优
  10. tensorflow之truncated_normal
  11. 源代码仓库选择-gitlab
  12. 密码学系列 - 双线性对
  13. 软件测试书籍有哪些_软件测试书籍推荐
  14. 子群的陪集-》群的拉格朗日定理
  15. 高景一号01星遥感影像解译数据分辨率是多少
  16. 安卓怎么转移到iphone_如何将联系人从iPhone转移到另一部电话
  17. 极域电子教室学生机房管理助手(好好上课)教程
  18. 利用cesium模拟台风移动路径——以利奇马台风为例
  19. 头像哟(^U^)ノ~YO
  20. git和coding 基本操作

热门文章

  1. unity3d打包到安卓平台报错BuildPlayerWindow+BuildMethodEXception:x error(新手第一坑)
  2. 钉钉PC端聊天中分享的网址生成卡片
  3. 2020-10-19。小白自学:飞机大战源码改造。(新手入门,学习总结。从零开始,步步为营。不同版本,独立运行。完整代码,感谢原著。)
  4. python修炼之道_Pythonic:Python 修炼之道
  5. 对 FaaS 的基础认识
  6. Android Camera1-Camera2-CameraView和CameraX使用
  7. c语言程序设计地位和作用,《C语言程序设计》教学实践
  8. 点对点协议PPP的特点
  9. php 删除 确认,js确认删除方法 js删除确认提示框
  10. unity Ignis - Interactive Fire(完美模拟:森林火灾、草原火灾、建筑火灾)