枚舉類實現單例模式


實現單例模式時候,要思考四個問題:

  1. 是否線程安全
  2. 多線程安全了,效率是否能接受
  3. 是否可以延遲加載
  4. 是否支持序列化

請看下面一張圖:

枚舉實現單例模式如下:簡潔優雅

public enum Singleton 0 {
    INSTANCE;
    int anInt;

    public int getAnInt() {
        return anInt;
    }

    public void setAnInt( int anInt ) {
        this.anInt = anInt;
    }

    public  void dosomethings(  ) {
        System.out.println("枚舉類實現單例");
    }
}

惡漢式單例模式如下:

public class Singleton 1{
    private static Singleton instance = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return instance;
    }
}

飽漢式單例模式



public class Singleton2 {
 
	private static Singleton2 singleton;
	
	private Singleton2(){
		
	}
	
	public static synchronized Singleton2 getInstance(){
		if(singleton == null) 
			singleton = new Singleton2();
		return singleton;
	}


雙重鎖模式(DCL):


public class Singleton3 {
	private static Singleton3 singleton;
	
	private Singleton3(){
		
	}
	
	public static Singleton3 getInstance(){
		if(singleton == null){
			synchronized(Singleton3.class){
				if(singleton == null){
					singleton = new Singleton3();
				}
			}
		}
		return singleton;
	}

推薦博客 https://juejin.im/post/5b50b0dd6fb9a04f932ff53f


免責聲明!

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



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