知識點:
靜態**塊
volatil 關鍵字 修飾變數
指令重排
多執行緒併發??
1.餓漢式
/**
* describe:惡漢式
* 類載入到記憶體後,就例項化乙個單例,【jvm保證執行緒安全】
* 有點:簡單實用
* 缺點:不管你用不用,類裝載時就完成例項化
* (只有在用的時候才會去載入,所以這個缺點也不算缺點...)
*/public class singleton01
public static singleton01 getinstance()
}
/**
* describe:惡漢式
* 跟01乙個意思
*/public class singleton02
//設定為外部不能呼叫
private singleton02()
public static singleton02 getinstance()
}
2.懶漢式
/**
* describe:lazy loading 懶漢式
* 【執行緒不安全】
*/public class singleton03
public static singleton03 getinstance()
return instance;
}}
/**
* describe:lazy loading 03-->04 加鎖 懶漢式
* * * 加鎖解決執行緒不安全 類被鎖住了
* 導致效率下降
*/public class singleton04
public static synchronized singleton04 getinstance()
return instance;
}}
/**
* describe:lazy loading 04-->05 加鎖 懶漢式
* 執行緒不安全
*/public class singleton05
public static singleton05 getinstance()
}return instance;
}}
/**
* describe:lazy loading 懶漢式
* 【雙重檢查】
* 【執行緒安全】
*/public class singleton06
public static singleton06 getinstance() }}
return instance;
}}
3.靜態內部類
/**
* describe:靜態內部類方式 【完美】
* 【jvm保證單例】
* 【執行緒安全】
* 【懶載入】載入外部類時不會載入內部類
*/public class singleton07
public static singleton07 getinstance()
private static class singleton07holder
}
4.列舉單例
/**
* describe:列舉單例 【完美中的完美】
* 【執行緒安全】
* 【防止反序列化】
*/public enum singleton08
}
總結:【餓漢式01】最實用, 【列舉】最完美,但是列舉看起來彆扭
來自為知筆記(wiz)
設計模式(1) 單例設計模式
單例設計模式 定義 確保乙個類只有乙個例項,並且自行例項化,並向整個系統提供這個例項。餓漢式 class single 通過該方法獲得例項物件 public single getinstance 類中其他方法盡量使用static public static void say 通過定義乙個私有訪問許可...
設計模式1單例設計模式
public class sigleton return instance 第二種執行緒加鎖的,太耗時了,執行緒安全是安全,但是太耗時間 這種簡單粗暴的方式不合理,不管他是不是 這種引起的第三種 不推薦使用 public static synchronized sigleton getinstanc...
單例設計模式1
所謂單例設計模式,即時採取一定的方法保證在整個軟體系統當中,對於某個類只能存在乙個物件例項,並且該類只提供乙個其物件例項的方法 靜態方法 優點 這種寫法比較簡單,就是在類裝載的時候就完成例項化.避免了執行緒同步問題 缺點 在類裝載的時候就完成了例項化,沒有達到lazy loading的效果.如果從始...