單例模式裏面必需要知道的事情

       單例模式裏面必需要知道的事情java

單例模式的UML面試

            

    //單例模式的正確寫法,不過執行順序必需要搞清楚
    public class Singleton {
	private static Singleton singleton = new Singleton();//1
	
	private Singleton(){
		System.out.println("你好");//2
	}
	public static Singleton getInstance(){
		return singleton;
	}
    }
    //不少朋友喜歡這樣寫,但這樣是錯誤的寫法,多線程下可能會產生不止一個實例
    public class Singleton {
	private static Singleton singleton;
	
	private Singleton(){
		System.out.println("你好");
	}
	public static Singleton getInstance(){
	        if(singleton==null){
	            return new Singleton();
	        }
		return singleton;
	}
    }

        因此單例模式裏面必需要知道的事情是,寫法2在多線程下是不能保證只有一個實例,就違背了單例模式。寫法1的執行順序是先靜態實例的初始化,而後纔是整個對像的實例化。(單例模式不少時候面試都喜歡叫手寫,不少時候就是看你考慮多線程這個方面沒有。)
多線程

相關文章
相關標籤/搜索