一 点睛

Hold 方式的单例完全是借助了类加载的特点。

二 代码

package singleton.singleton3;// final 不允许继承
public final class Singleton {// 实例变量private byte[] data = new byte[1024];private static Singleton instance = null;private Singleton() {System.out.println("+++++");}// 在静态内部类中持有 Singleton 的实例,并且可被直接初始化private static class Holder {private static Singleton instance = new Singleton();}// 向 getInstance 方法加入同步控制,每次只能有一个线程能进入public static Singleton getInstance() {return Holder.instance;}public static void main(String[] args) {System.out.println(Singleton.getInstance());}
}

三 测试结果

+++++

singleton.singleton3.Singleton@7a81197d

如果注释掉 System.out.println(Singleton.getInstance()); 则什么都不打印。

四 说明

在 Singleton 类中并没有 instance 的静态成员,而是将其放入到了静态内部类 Holder 中,并不会创建 Singleton 的实例,Holder 类中定义了 Singleton 的静态方法,并且直接进行了实例化,当 Holder 被主动引用的时候则会创建 Singleton 的实例,Singleton 实例的创建过程在 Java 程序编译时期收集到 <clinit>() 方法中,该方法是同步方法,可以保证内存的可见性、JVM 指令的顺序性和原子性、Holder 方式的单例设计是最好的设计之一,也是目前使用比较广的设计之一。

Holder 方式的单例相关推荐

  1. 公共类java连接数据库_JDBC 建立连接公共操作类(静态方式与单例方式)

    package com.ighost.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql. ...

  2. java中单例实现常用的方式_Java单例的常见形式

    Java单例的常见形式 本文目的:总结Java中的单例模式 本文定位:学习笔记 学习过程记录,加深理解,便于回顾.也希望能给学习的同学一些灵感 一.非延迟加载单例类 public class Sing ...

  3. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  4. python线程安全的单例_[python笔记] 单例的几种实现方式(线程安全)

    单例实现方式: 1.单例装饰器; 2.使用类: 3.使用元类 1.单例装饰器(非线程安全) 通过装饰器使一个类变成单例类,但是并非线程安全的,多线程状态下,每个线程创建不同的实例,因为没有加线程锁,所 ...

  5. 关于“如何破坏单例“我说了好几种方式,面试官却说:我其实随便问问,没想到你真会

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.是一种创建型设计模式.他的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式一般体现在类声明中 ...

  6. 关于如何破坏单例我说了好几种方式,面试官却说:我其实随便问问,没想到你真会...

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.是一种创建型设计模式.他的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式一般体现在类声明中 ...

  7. python3的配置文件类单例实现_单例模式的几种实现方式及对比

    来源:博客园 作者:为何不是梦 链接:https://www.cnblogs.com/ibigboy/p/11423613.html 所谓单例就是在系统中只有一个该类的实例. 单例模式的核心分以下三个 ...

  8. 【设计模式】单例(Singleton)

    在众多的设计模式中单例应该是最常见的设计模式了,对于一名初级工程师来说,这个设计模式可能是自己唯一能够拿的出手的设计模式.那么什么是单例模式呢?顾名思义单例就是单个实例,也就是说在整个类的使用中只允许 ...

  9. 在Python中创建单例

    这个问题不是为了讨论是否需要单例设计模式 ,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式. 在这种情况下,我定义"最pytho ...

最新文章

  1. 【译】ICO 2.0 — The Advent of What Crypto-Fund Raising Should Really Look Like
  2. 几种常见的用于拟合的分布
  3. http请求过程 Android,android HTTP网络请求回顾
  4. QT的QImage类的使用
  5. 为什么使用ES6生成器
  6. 关于停止发表“每周新闻回顾”的通知
  7. 日期控件的使用 c# 114867852
  8. 什么叫python代码的优化_优化Python代码
  9. 利用truffle与智能合约进行交互
  10. BytePS源码解析
  11. PLSQL配置Oracle 64位
  12. springboot 代码自动生成器
  13. AXure破解授权码
  14. 用python制作上海疫情评论词云图-自定义形状
  15. 几个著名的心理学实验
  16. (转)Django新手需要注意的10个要点
  17. noip普及组 c语言,厉害了,NOIP普及组竟然这样出题,你会做吗?
  18. 获取网页上没有下载链接的视频音频资源 火狐浏览器插件 Video DownloadHelper
  19. vecloud php,GitHub - YanzhaoMa/APICloud-PHP-SDK
  20. 运放的防护,如何避免电气过载(ESO)

热门文章

  1. 译(自编码器) Hinton2006---Reducing the Dimensionality of Data with Neural Networks
  2. 机器学习之概率论与数理统计基础知识-(2)随机变量和数字特征
  3. [博学谷学习记录]超强总结,用心分享|第07节 常用的API-----笔记篇
  4. 2021年需要关注的15大软件测试趋势(一)
  5. RAM和ROM存储空间的混合
  6. python小玩意——抠图换背景
  7. 两台电脑如何共享文件?如何互相传输文件?
  8. 为什么说中小学编程教育是创新思维体操
  9. mongo从开始到安装以及遇到的问题
  10. zabbix_sender用法实例