/**
* 1、餓漢式
* 在呼叫之前會首先例項化.
* 優點:寫法簡單,避免了執行緒同步問題。
* 缺點:在呼叫之前就會例項化,沒有達到lazy loading的效果。如果自始至終都沒有使用過這個實力,就會造成記憶體浪費。
* * 注意: 1、載入順序,先靜態再動態,先屬性再方法,先上後下。
* 2、構造方法要是私有化的,
* 3、屬性要用final修飾,不能夠被覆蓋。
* @author wangfy
*/public class ehanshi
public static ehanshi getinstance()
}
/**
* 2、餓漢式:靜態**塊實現
* 該方式同上乙個相同,但是例項化使用了靜態**塊來實現。
* @author wangfy
*/public class ehanshi2
private ehanshi2(){}
public static ehanshi2 getinstance()
}
/**
* 3、懶漢式:執行緒不安全
* 呼叫的時候才會例項化
* 優點:達到lazy loading的效果
* 缺點:執行緒不安全,如果多執行緒情況下,如果乙個執行緒進入if判斷,另乙個執行緒也進入if判斷,還沒有往下執行,那麼就會產生多個例項
* @author wangfy
*/public class lanhanshi
public static lanhanshi getinstance()
return lanhanshi;
}}
/**
* 4、懶漢式:執行緒安全,同步方法
* 在獲取例項的方法上加上同步鎖。
* 優點:即達到lazy loading的效果,又解決了執行緒不安全的問題。
* 缺點:效率低下,每個執行緒在獲取類的時候,執行getinstance都要進行同步。
* 需要改進:而且該方法實現過一次例項化就行了。後面獲取例項不需要進入同步直接return就可以了。
* @author wangfy
*/public class lanhanshi2
public static synchronized lanhanshi2 getinstance()
return lanhanshi;
}}
/**
* 5、懶漢式:雙重檢查 double-check
* 摒棄同步方法,使用了同步**塊。進行了兩次if判斷。這樣例項化只執行了一次,後面如果再要訪問直接return。
* 優點:即達到lazy loading的效果,又解決了執行緒不安全的問題,效率相對較高。
* @author wangfy
*/public class lanhanshi3
public static lanhanshi3 getinstance()
}} return lanhanshi;
}}
/**
* 6、懶漢式:靜態內部類
* 該方式跟餓漢式採用的機制類似,但是有不同。兩隻都是使用了類載入機制來保證例項化時只有乙個執行緒。
* 不同的地方在餓漢式方式是只要lanhanshi4類被裝載就會例項化,沒有懶載入的作用,
* 而靜態內部類方式在lanhanshi4類被裝載時並不會立即例項化,而是在需要例項化時,
* 呼叫getinstance方法,才會裝載lanhaninstance類,從而完成lanhanshi4的例項化。
* 類的靜態屬性只會在第一次載入類的時候初始化,所以在這裡,jvm幫助我們保證了執行緒的安全性,在類進行初始化時,別的執行緒是無法進入的。
* 優點:避免了執行緒不安全,延遲載入,效率高。
* @author wangfy
*/public class lanhanshi4
private static class lanhaninstance
public static lanhanshi4 getinstance()
}
Java設計模式(一) 單例模式
對於單例,最早可追溯到我上學那會兒的課程實習,那時候有企業裡的員工給我們進行軟體程式設計培訓,那會兒第一次聽說單例的概念。在印象裡,問 你們知道如何只建立出乙個物件嗎?答 不知道。為什麼只要建立乙個物件 問 聽說過單例嗎?答 沒有,單例是幹啥的?解釋 單例就是保證程式執行期間,保證某乙個類永遠只有乙...
JAVA設計模式(一)單例模式
單例類只能有乙個例項。單例類必須自己建立自己的唯一例項。單例類必須給所有其他物件提供這一例項。private static singleton instance private singleton public static singleton getinstance return instance...
JAVA 設計模式(一)單例模式
懶漢模式 public class singlelh public singlelh getinstance 餓漢模式 public class singlelh public singlelh getinstance 懶漢模式可以延遲載入,但是執行緒不安全,得加鎖 餓漢模式執行緒安全,但是不能延遲...