• 单例模式


    来源:[尚硅谷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;
    	}
    
    }
    
  • 相关阅读:
    课后作业之找水王
    SCRUM第二阶段第十天
    第九周总结
    冲刺一3
    用户项目
    预会热词统计
    冲刺一2
    冲刺一(一阶)1
    第八周总结
    小组合作
  • 原文地址:https://www.cnblogs.com/miaomiaowu/p/14965752.html
Copyright © 2020-2023  润新知