單例設計模式的設計——餓漢模式
package SingleInstanceModel;
/**
* Created by JYM on 2019/1/8
* 單例模式下的:餓漢模式
* */
//final不允許被繼承
public final class Singleton
{
//例項變數
private byte[] data = new byte[1024];
//在定義例項物件的時候直接初始化
private static Singleton instance = new Singleton();
//私有建構函式,不允許外部new
private Singleton()
{
}
public static Singleton getInstance()
{
return instance;
}
}
/**
* 餓漢式的關鍵在於instance作為類變數並且直接得到了初始化,我們知道如果主動使用Singleton類,那麼instance例項將會直接完成建立,
* 包括其中的例項變數都會得到初始化,比如1K空間的data將會同時建立。
* instance作為類變數在類初始化的過程中會被收集進<clinit>()方法中{注:clinit是class initialize的簡寫},該方法能夠百分之百地保證同步,
* 也就是說instance在多執行緒的情況下不可能被例項化兩次,但是instance被ClassLoader載入後可能很長一段時間才被使用,
* 那就意味著instance例項所開闢的堆記憶體會駐留更久的時間。
* 如果一個類中的成員屬性比較少,且佔用的記憶體資源不多,餓漢的方式也未嘗不可,相反,如果一個類中的成員都是比較重要的資源,那麼這種
* 方式就會有些不妥。
* 總結起來,餓漢式的單例設計模式可以保證多個執行緒下的唯一例項,getInstance方法效能也比較高,但是無法進行懶載入。
* */