單例模式裏面必需要知道的事情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的執行順序是先靜態實例的初始化,而後纔是整個對像的實例化。(單例模式不少時候面試都喜歡叫手寫,不少時候就是看你考慮多線程這個方面沒有。)
多線程