• 枚举方式的线程安全的单例


    1,枚举

    public enum Color {
        blue, red, yellow
    }

    枚举是会被另外处理的。

    • 枚举只能拥有私有的构造器
    • 枚举类实际上是一个继承Enum的一个final类
    • 枚举类不允许被反序列化,Enum重写了方法
    • 静态代码块中对final变量的值进行初始化
    • enum类最终是一个final class
    public final class voctrals.study.whatisspring.test.Color extends java.lang.Enum<voctrals.study.whatisspring.test.Color> {
      public static final voctrals.study.whatisspring.test.Color blue;
      public static final voctrals.study.whatisspring.test.Color red;
      public static final voctrals.study.whatisspring.test.Color yellow;
      public static voctrals.study.whatisspring.test.Color[] values(); // jdk给加上的
      public static voctrals.study.whatisspring.test.Color valueOf(java.lang.String); // jdk给加上的
      public int getValue();
      static {};
    }

    Enum中的方法

        /**
         * prevent default deserialization
         */
        private void readObject(ObjectInputStream in) throws IOException,
            ClassNotFoundException {
            throw new InvalidObjectException("can't deserialize enum");
        }
    
        private void readObjectNoData() throws ObjectStreamException {
            throw new InvalidObjectException("can't deserialize enum");
        }

    2,单例模式

    单例模式就是保证整个jvm中只存在唯一的一个实例。

    饿汉式,在被jvm加载的过程中就已经被初始化了。静态代码块的原因。

    public class BeanContainer {
    
        public static BeanContainer getInstance() {
            return ContainerHolder.HOLDER.instance;
        }
    
        private enum ContainerHolder {
            HOLDER;
            private BeanContainer instance;
    
            ContainerHolder() {
                instance = new BeanContainer();
            }
        }
    }
  • 相关阅读:
    react native 添加mobx
    js-(19,999,999.00)
    html移动端 -- meta-模板 + rem
    HTML5 移动端头部标签
    js
    html --- rem
    es6--async--await
    nrm+nvm
    js-call-apply
    SQL映射文件
  • 原文地址:https://www.cnblogs.com/voctrals/p/10628137.html
Copyright © 2020-2023  润新知