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

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();
        }
    }
}

 

posted @ 2019-03-30 18:14  VoctrALs  阅读(1069)  评论(0编辑  收藏  举报