zoukankan      html  css  js  c++  java
  • 枚举方式的线程安全的单例

    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();
            }
        }
    }
  • 相关阅读:
    excel 常用小技巧
    如何以正确的顺序重新安装驱动程序
    kaby LAKE 仅支持 Windows10
    关闭远程计算机CMD命令
    根据IP查主机名
    Charles安装与使用
    常用的算法思想总结
    iOS学习之单例模式
    PHP之简单实现MVC框架
    Objective-C 继承和多态
  • 原文地址:https://www.cnblogs.com/voctrals/p/10628137.html
Copyright © 2011-2022 走看看