三種執行緒安全的單例模式

2021-09-13 00:10:19 字數 2697 閱讀 9877

單例模式(singleton):又叫單態模式,它出現的目的是為了保證乙個類在系統中只有乙個例項,並提供乙個訪問它的全域性訪問點。即:為了可以保證系統中乙個類只有乙個例項而且該例項又易於外界訪問,從而方便對例項個數的控制並節約系統資源而出現的解決方案;

2.1、有頻繁例項化然後銷毀的情況,也就是頻繁的 new 物件,可以考慮單例模式;

2.2、建立物件時耗時過多或者耗資源過多,但又經常用到的物件;

2.3、頻繁訪問 io 資源的物件,例如資料庫連線池或訪問本地檔案;

3.1 靜態內部類模式:

public class singleton

// 靜態內部類

private static class innerclass

public singleton getinstance()

}

3.2 雙重檢查鎖:

public class singleton

public singleton getinstance()}}

return instance ;

} }

4、五種單例示例

package org.sw.single;

/** * 單例模式

* * @description: todo

* @author liangsw

* @date 2019-07-22

* @version 1.0v

*//**

* 餓漢式

* * @description: todo

* @author liangsw

* @date 2019-07-22

* @version 1.0v

*/public class singleton

public static singleton getinstance()

}/**

* 懶漢式

* * @description: todo

* @author liangsw

* @date 2019-07-22

* @version 1.0v

*/class lazysingleton

private static lazysingleton getinstance()

return lazysingleton; }}

/** * 多執行緒下執行緒安全的懶漢式單例

* * @description: 1 同步延遲載入 — synchronized方法

* @author liangsw

* @date 2019-07-22

* @version 1.0v

*/class multithreadsingleton

public static synchronized multithreadsingleton getinstance()

return instance; }}

/** * 多執行緒下執行緒安全的懶漢式單例

* * @description: 2 同步延遲載入 — synchronized塊

* @author liangsw

* @date 2019-07-22

* @version 1.0v

*/class blocksingle

private static blocksingle getinstance()

} return instance; }}

/** * 多執行緒下執行緒安全的懶漢式單例

* * @description: 3 同步延遲載入 — 使用內部類實現延遲載入

* @author liangsw

* @date 2019-07-22

* @version 1.0v

*/class interclasssingleton

private static class interclass

private static interclasssingleton getinstance()

}/**

* 多執行緒下執行緒安全的懶漢式單例

* * @description: 4 雙重檢測(執行緒安全的懶漢式單例)

* @author liangsw

* @date 2019-07-22

* @version 1.0v

*/class doublechecksingleton

private static doublechecksingleton getinstance()

}} return instance; }}

/** * 多執行緒下執行緒安全的懶漢式單例

* * @description: 5 threadlocal

* @author liangsw

* @date 2019-07-22

* @version 1.0v

*/class threadlocalsingleton

private static threadlocalsingleton getinstance()

}threadlocal.set(instance);

} return threadlocal.get();

}}

單例模式的三種寫法

這裡介紹三種單例模式寫法。第一種 餓漢模式 類載入時就初始化 public class singletonhungry public static singletonhungry getinstance 第二種 懶漢模式 類載入時不初始化,當呼叫getinstance方法時初始化 public cl...

單例模式的三種實現

class singleton public static singleton getinstance 缺點 類每次使用時都會初始化靜態成員變數 呼叫該類的其它方法時也會初始化 浪費記憶體。class singleton public static singleton getinstance ret...

單例模式的三種寫法

創造型模式 單例模式 餓漢式 推薦優點 在類載入的時候就已經建立好了例項,沒有執行緒同步的問題 缺點 如果這個例項從始至終都沒有用到,那麼就會造成記憶體浪費 方法一 使用靜態物件 public class singleton 提供乙個靜態方法返回例項物件 public static singleto...