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

1,枚举

public enum Color {
    blue, red, yellow
}

枚举是会被另外处理的。java

  • 枚举只能拥有私有的构造器
  • 枚举类其实是一个继承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中的方法spring

    /**
     * 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

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

public class BeanContainer {

    public static BeanContainer getInstance() {
        return ContainerHolder.HOLDER.instance;
    }

    private enum ContainerHolder {
        HOLDER;
        private BeanContainer instance;

        ContainerHolder() {
            instance = new BeanContainer();
        }
    }
}
相关文章
相关标签/搜索