枚舉方式的線程安全的單例


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM