單例模式是每個java程序員最先接觸到設計模式之一,因爲他結構簡單。這裏也不多說了簡單寫一個單例模式的Demo
package com.lyk;
public class SingletonDemo {
//私有化構造方法
private SingletonDemo() {
}
//static隨着類的加載而加載一次
private static SingletonDemo singletonDemo = new SingletonDemo();
//這個方法一定是static的因爲他要使用SingletonDemo類直接調用
public static SingletonDemo getInstance() {
return singletonDemo;
}
}
package com.lyk;
public class SingletonDemo {
//私有化構造方法
private SingletonDemo() {
}
//我在類的初始化的時候,我只創建了一個null的對象
private static SingletonDemo singletonDemo = null;
//這個方法一定是static的因爲他要使用SingletonDemo類直接調用
public static SingletonDemo getInstance() {
//當高併發的時候,會出現很多線程同步到這個狀態,破壞了單例
if (singletonDemo == null) {
return new SingletonDemo();
}
return singletonDemo;
}
}
顯然懶漢式問題很嚴重,他不能保證程序初始化時多線程併發訪問的單例狀態