码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-03-30 18:39:44      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:otf   enum   枚举   方式   obj   序列化   throw   cep   变量   

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

 

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

标签:otf   enum   枚举   方式   obj   序列化   throw   cep   变量   

原文地址:https://www.cnblogs.com/voctrals/p/10628137.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!