單例模式餓漢式單例
public class hungrysingleton
public static hungrysingleton getinstance()
}
也可以將例項初始化的過程放在靜態**塊中。這兩種寫法都非常的簡單,也非常好理解,餓漢式適用在單例物件較少的情況。
懶漢式單例
懶漢式單例的特點是:被外部類呼叫的時候內部類才會載入,下面看懶漢式單例的簡單實現
懶漢式單例實現一:
public class lazy******singleton
private static lazy******singleton lazy = null;
public static lazy******singleton getinstance()
return lazy;
}}
**測試:
exectorthread 類
public class exectorthread implements runnable
}
lazy******singletontest 類
public class lazy******singletontest
}
public class lazy******singleton
private static lazy******singleton lazy = null;
public synchronized static lazy******singleton getinstance()
return lazy;
}}
public class lazydoublechecksingleton
public static lazydoublechecksingleton getinstance()}}
return lazy;
}}
這裡synchronized 只會在建立例項的時候枷鎖,之後lazy不等於null,就不會出現執行緒阻塞的情況。但是,用到 synchronized 關鍵字,總歸是要上鎖,對程式效能還是存在一定影響的。如何優化? 看如下 採用靜態內部類的實現方式:
public class lazyinnerclasssingleton
//每乙個關鍵字都不是多餘的
//static 是為了使單例的空間共享
//保證這個方法不會被重寫,過載
public static final lazyinnerclasssingleton getinstance()
//預設不載入
private static class lazyholder
}
這種形式其實就是餓漢式+內部類,利用內部類用到才會載入的特性,解決了懶漢式不管用不用都載入帶來的問題。兼顧餓漢式的記憶體浪費,也兼顧 synchronized 效能問題。內部類一定是要在方法呼叫之前初始化,巧妙地避免了執行緒安全問題。 單例設計模式(餓漢單例設計模式 懶漢單例設計模式)
1.什麼是單例 單例的意思是乙個類永遠只存在乙個物件,不能建立多個物件。2.為什麼要用單例 開發中有很多的物件我們只需要乙個,例如虛擬機器物件,任務管理器物件 物件越多越佔記憶體,有時候只需要乙個物件就可以實現業務,單例可以節省記憶體空間。3.如何實現單例 單例的實現方式有 餓漢單例設計模式 通過類...
單例模式 單例模式
餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...
設計模式 一 單例模式
思路 1 如果其他程式能夠隨意用new建立該類物件,那麼就無法控制個數。因此,不讓其他程式用new建立該類的物件。2 既然不讓其他程式new該類物件,那麼該類在自己內部就要建立乙個物件,否則該類就永遠無法建立物件了。3 該類將建立的物件對外 整個系統 提供,讓其他程式獲取並使用。步驟 1 將該類中的...