zoukankan      html  css  js  c++  java
  • 单例模式

    来源:[尚硅谷JavaEE面试题-哔哩哔哩]

    一、饿汉式

    直接实例化对象

    • 类加载与初始化时直接 new 对象

    枚举

    • 类加载与初始化时直接产生对象

    静态代码块饿汉式

    • static 代码块最终会和其他初始化语句,一起合成 <clinit> 方法一起初始化。

      • <clinit> 方法的执行时期: 类初始化阶段(该方法只能被 jvm 调用,专门承担类变量的初始化工作)。

      • <clinit> 方法的内容: 所有的类变量初始化语句和类型的静态初始化器。

    二、 懒汉式

    线程不安全(单线程)

    线程安全

    • 指令重排的话,也会线程安全么???

    静态内部类形式

    //懒惰式-静态代码块可以保证线程安全
    // 只有当内部类被加载时,才会创建对象
    // 静态内部类不会自动随着外部类的加载和初始化而初始化。它是单独去加载和初始化的。
    /**
    1)class Singleton 而不需要 public static 修饰
    2)静态内部类的静态成员 SINGLETON 声明为 final
    */
    class Singleton{
    	private Singleton(){}
    	//静态内部类 
    	private static class LazyHolder(){
    		private static final Singleton SINGLETON = new Singleton();
    	}
    
    	public static Singleton getInstance(){
    		return LazyHolder.SINGLETON;
    	}
    
    }
    
  • 相关阅读:
    Java设计模式—模板方法模式
    STM32 常用GPIO操作函数记录
    GPIO 配置之ODR, BSRR, BRR 详解
    STM32F4先设置寄存器还是先使能时钟
    LDR指令的格式:
    printf函数重定向
    stm32F4各个库文件的作用分析
    STM32F4时钟设置分析
    STM32F407存储器和总线架构
    SPI移位寄存器
  • 原文地址:https://www.cnblogs.com/miaomiaowu/p/14965752.html
Copyright © 2011-2022 走看看