單例(Singleton)模式的定義:指一個類只有一個實例,且該類能自行建立這個實例的一種模式。安全
單例模式有 3 個特色:spa
餓漢式單例code
package single; //餓漢式單例 public class hungry { //構造器私有化 private hungry(){ } //一啓動類就直接加載 //可能會形成內存浪費 byte[] byte1=new byte[1024*1024]; byte[] byte2=new byte[1024*1024]; byte[] byte3=new byte[1024*1024]; byte[] byte4=new byte[1024*1024]; private final static hungry hun=new hungry(); public static hungry getHun(){ return hun; } }
懶漢式單例對象
package single; //懶漢式單例 public class LazyMan { // 構造器私有化 private LazyMan(){ } private volatile static LazyMan lazyMan; // 雙重檢測鎖的懶漢式單例 DCL單例模式 public static LazyMan getInstance(){ // 提升效率,這一層if判斷 if (lazyMan==null){ // 加鎖 synchronized (LazyMan.class){ if(lazyMan==null){ lazyMan=new LazyMan();//不是原子性操做,不要在屬性值上加volatile } } } return lazyMan; } }
靜態內部類單例blog
package single; //靜態內部類 public class Holder { // 構造器私有 private Holder(){ } // 調用靜態內部類 public static Holder getInstance(){ return holder.HOLDER; } // 靜態內部類 public static class holder{ private final static Holder HOLDER=new Holder(); } }
這三種是不安全的單例模式,能夠經過反射拿到類中的屬性和方法內存
以後更新枚舉單例模式get