五種單例模式實現懶漢+餓漢+雙重檢測鎖實現+靜態內部類改進餓漢式+列舉
核心作用:保證一個類只有一個物件,並提供一個訪問該例項的全域性訪問點
package xidian.lili.thread.syn;
/**
1.建立單例模式(懶漢式+雙重檢測鎖實現)
構造器私有化 確保外部不能建立物件
建立私有靜態變數,先不初始化,用的時候再初始化(資源利用率高了)
建立對外的公共靜態方法(加同步,併發效率低)建立物件指向私有靜態變數並返回
*/
public class MyJvm {
private static MyJvm jvm;建立私有靜態變數
private MyJvm(){
構造器私有化
}
public static MyJvm getInstance3() throws InterruptedException{
//雙重檢查 提高效率
if(jvm==null){//如果已經有物件 執行緒都不在等待 沒有物件在進去
synchronized(Jvm.class){//同步快 不能this物件 靜態方法中沒有this物件 放入類的位元組碼資訊 效率低
if(jvm==null){
jvm=new MyJvm();
}
}
}
return jvm;
}
}
/**
餓漢式 建立單例模式
構造器私有化 確保外部不能建立物件
建立私有靜態變數+建立物件(類在初始化時,就載入這個物件,JVM載入類時天然保證執行緒安全,不延時,但是隻是載入類,不用到物件這樣就會造成資源浪費)
建立對外的公共靜態方法(方法不加同步 效率高)返回私有靜態變數
*
*/
class MyJvm2 {
//由於是靜態方法 類載入時就會建立物件 執行緒安全 可是效率低 沒有使用該類物件就建立了 所以改進,把建立物件放在內部類中
private static MyJvm2 jvm=new MyJvm2();
private MyJvm2(){
}
public static MyJvm2 getInstance() throws InterruptedException{
return jvm;
}
}
改進:靜態內部類實現兼具延遲載入和併發高效
class MyJvm3{
//加入靜態內部類進行包裹
//載入了MyJvm3 不會載入MyJvmhold 只有在使用的時候 比如呼叫getInstance() 方法在載入建立物件
//載入類時屬性會被初始化 方法不會
private static class MyJvmhold{
private static MyJvm3 jvm=new MyJvm3();
}
private MyJvm3(){
}
public synchronized static MyJvm3 getInstance() throws InterruptedException{
return MyJvmhold.jvm;
}
}
/**
在jdk裡的單例設計模式Runtime 餓漢式
public class Runtime {
private static Runtime currentRuntime = new Runtime();//屬性建立物件
//公開訪問物件
public static Runtime getRuntime() {
return currentRuntime;
}
//構造方法私有化
private Runtime() {}
*/
避免反射漏洞 不能延遲
單例模式反射和反序列化漏洞及解決
相關文章
- 設計模式:單例模式介紹及8種寫法(餓漢式、懶漢式、Double-Check、靜態內部類、列舉)設計模式單例
- scala:分別使用懶漢式和餓漢式實現單例模式單例模式
- 餓漢式單例與懶漢式單例的C#實現單例C#
- 設計模式——懶漢式單例類PK餓漢式單例類設計模式單例
- java單例模式懶漢和餓漢Java單例模式
- 詳談單例、餓漢、和懶漢模式單例模式
- C#單例—餓漢式和懶漢式C#單例
- 懶漢模式和餓漢模式模式
- 設計模式:單例模式 (關於餓漢式和懶漢式)設計模式單例
- 【java】單例設計模式——餓漢式和懶漢式、Runtime、TimerJava單例設計模式
- java學習回顧---懶漢式和餓漢式Java
- (單例設計模式中)懶漢式與餓漢式在多執行緒中的不同單例設計模式執行緒
- 餓漢模式C++模式C++
- C++之this指標、拷貝構造、賦值構造、單列模式(餓漢模式、懶漢模式)C++指標賦值模式
- 設計模式-單例模式之餓漢式-多執行緒設計模式單例執行緒
- 設計模式-單例模式之懶漢式-多執行緒設計模式單例執行緒
- 別再用懶漢模式了——從JVM的角度看單例模式模式JVM單例
- java設計模式之單例模式你真的會了嗎?(懶漢式篇)Java設計模式單例
- 靜態內部類實現的單例模式是執行緒安全的單例模式執行緒
- WPF實現Win10漢堡選單Win10
- 漢羅塔問題 java實現Java
- Java簡單實現漢語詞頻統計Java
- Java 利用列舉實現單例模式Java單例模式
- PHP 實現字串翻轉(包含中文漢字)的實現PHP字串
- 五種方式實現 Java 單例模式Java單例模式
- SQLSERVER中實現返回漢字筆畫數的函式;SQLServer函式
- C++單例懶漢式和多執行緒問題(MUTEX 保護)C++單例執行緒Mutex
- 461.漢明距離(c++實現)C++
- python3實現漢字轉拼音Python
- 工作深度總結——雙重鎖定實現單例單例
- js檢測漢字的長度程式碼例項JS
- 檢驗漢字的正規表示式程式碼例項
- 剖析漢字描紅在flutter中的實現原理Flutter
- 透過列舉enum實現單例單例
- C#漢字轉漢語拼音C#
- 內部類單例模式,單例模式
- 為什麼java中用列舉實現單例模式會更好Java單例模式
- Win10 UWP 開發系列:使用SplitView實現漢堡選單及頁面內導航Win10View