美文网首页
单例模式之静态内部类实现方式及原理

单例模式之静态内部类实现方式及原理

作者: 谜00016 | 来源:发表于2019-02-20 16:59 被阅读23次

代码实现

本篇文章采用静态内部类的方式实现单例模式。代码如下

/**
 * @Author: ming.wang
 * @Date: 2019/2/20 15:46
 * @Description:
 */
public class StaticInnerClassSingleton {

    private StaticInnerClassSingleton() {}

    private static class InnerClass{
        private static StaticInnerClassSingleton instance=new StaticInnerClassSingleton();
    }

    public static StaticInnerClassSingleton getInstance(){
       return InnerClass.instance;
    }
}

原理分析

在分析原理之前,我们得了解一些基本前提

根据Java语言规范,在首次发生下列任意一种情况时,一个类或接口类型T将被立即初始化。
1)T是一个类,而且一个T类型的实例被创建。
2)T是一个类,且T中声明的一个静态方法被调用。
3)T中声明的一个静态字段被赋值。
4)T中声明的一个静态字段被使用,而且这个字段不是一个常量字段。
5)T是一个顶级类(Top Level Class,见Java语言规范的§7.6),而且一个断言语句(assert关键字修饰的语句)嵌套在T内部被执行。

Class对象的初始化锁

对于同一个classloader来说,加载某个class文件为Class对象时。为保证class文件只会被加载一次,所以每种class文件都会有一个锁。

我们画图示意一下 image.png

当线程1执行StaticInnerClassSingleton.getInstance()这句代码的时候,内部类中的静态成员变量instance被赋值,由前面知道所以InnerClass立刻被初始化,此时线程1获得InnerClass类的初始化锁,直到InnerClass被完全初始化,即instance也完成了初始化。

相关文章

  • kotlin实现单例模式

    1.懒汉式实现单例模式 2.线程安全懒汉式实现单例模式 3.双重校验懒汉式实现单例模式 4.静态内部类方式实现单例模式

  • 单例模式

    饿汉模式: 懒汉模式: Double CheckLock(DCL)实现单例 静态内部类实现单例 枚举单例 使用容器...

  • java设计模式之单例模式

    单例模式属于java设计模式的一种,最常见实现方式有以下几种 懒汉、饿汉、双重检查单例、静态内部类单例。 单例模式...

  • 单例模式之静态内部类实现方式及原理

    代码实现 本篇文章采用静态内部类的方式实现单例模式。代码如下 原理分析 在分析原理之前,我们得了解一些基本前提 根...

  • 创建型设计模式之单例,工厂方法,抽象工厂,策略,建造者,原型

    1:单例模式 只能有一个实例 推荐:静态内部类单例模式 理由:静态内部类,当你使用它的时候才加载,这种方式不仅能够...

  • 2018-12-04

    单例模式 目录 -饿汉模式 -懒汉模式 - 双重检测 - 静态内部类 - 枚举实现 - 容器实现 饿汉模式 代码 ...

  • 2022-01-02

    1、设计模式 1.1、单例模式 最近比较好的写法有静态内部类实现和枚举单例。

  • 《每天进步一点点》DAY7: 常用设计模式

    单例模式 (1)饿汉式 开发用这种方式。 (2)懒汉式 (多线程的问题) (3)静态内部类方式实现 简单工厂模式 ...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • 项目实战—那些年常用的单例模式

    常见的单例模式:饿汉式、懒汉式、双重检查锁模式、静态内部类实现单例模式、枚举单例模式,本文重点是在项目中如何实现上...

网友评论

      本文标题:单例模式之静态内部类实现方式及原理

      本文链接:https://www.haomeiwen.com/subject/nrvhyqtx.html