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;
    	}
    
    }
    
  • 相关阅读:
    react-redux简单使用
    jQuery——Js与jQuery的相互转换
    移除HTML5 input在type="number"时的上下小箭头
    echarts 5.0 地图
    Vue echarts 设置初始化默认高亮
    echarts 渐变色
    隐藏滚动条css
    echarts 柱状图--圆角
    echarts 气泡图--option
    Vue 圆柱体组件
  • 原文地址:https://www.cnblogs.com/miaomiaowu/p/14965752.html
Copyright © 2011-2022 走看看