單例的介紹
在專案的過程中存在著這樣特點的一些類,頻繁使用的物件,比如**的訪問記數器,資料庫的連線池,執行緒池等等方面只允許擁有乙個物件,允許擁有乙個例項。這樣的情況下會用到單例。
單例模式的好處
(1). 對於頻繁使用的物件,可以省略建立物件所花費的時間,減少系統的開銷
(2). 由於new操作的次數減少,因而對系統記憶體的使用頻率也會降低,減輕gc壓力,縮短gc停頓時間
單例模式的幾種寫法
3.1最簡單的單例模式(俗稱懶漢式)
/**
* *@classname: singleton
*@description: todo(最簡單的單例模式)
*@author sen
*@date 2023年3月9日 **/
public
class
singleton
//2.私有例項化物件,在jvm載入類的時候,因為是static的,所以也會被建立,
而我們不知道會不會用到這個類
private
static singleton instance = new singleton();
//3.提供乙個公有的方法
public
static singleton getinstance()
//此單例的壞處:如果單例建立的過程十分緩慢,這個單例類中還有其他方法來
供呼叫,在使用這個類的方法的情況下都會初始化單例類的變數,而不管你是否
用到單例
//舉例.如果其他類函式中呼叫到sayhello,但我們沒有使用到單例類,他還是會被建立出來
public
static
void
sayhello()
//如果單例建立過程十分緩慢,但是我們在呼叫sayhello方法的`這裡寫**片`時候不需要使用到單例,這樣就會有額外的負載
//為了提高系統在相關函式中呼叫的速度,就需要加入延遲載入機制
//延遲載入解釋:當真正用到的時候才真正執行資料載入操作
}
3.2 延遲載入的單例模式(懶漢公升級版)
/**
* *@classname: lazysingleton
*@description: todo(延遲載入的單例模式)
*@author sen
*@date 2023年3月9日 **/
public
class
lazysingleton
//2.把物件設定為null,確保系統在啟動的時候沒有額外的負載,只有當觸發的情況下才會使用到此變數
private
static lazysingleton instance = null;
//3.設定乙個同步機制,避免多執行緒下使用單例建立多個,如果存在物件則返回不存在則建立
public
static
synchronized lazysingleton getinstance()
return instance;
}//此單例的缺點,加入了synchronized關鍵字,所以在多個執行緒使用單例的時候會非常緩慢,效能較低
}
3.3使用內部類的單例模式
/**
* *@classname: staticsingleton
*@description: todo(單例模式)
*@author sen
*@date 2023年3月9日 **/
public
class
staticsingleton
//2.建立乙個內部類來例項化構造方法
private
static
class
singletonholder
//3.對外提供了乙個公有的方法
public
static staticsingleton getinstace()
//此單例模式的優點:當單例被載入的時候,其內部類不會被初始化,確保jvm載入完單例類但並沒有例項化,只有調取getinstace方法的時候
//才會載入內部類,從而初始化instance
//總結:使用內部類來實現單例,既可以做到延遲載入,也不必使用同步關鍵字,是一種比較完善的實現方式
}
單例模式介紹
使用單例模式有乙個必要條件 在乙個系統要求乙個類只有乙個例項時才應當使用單例模式。單例模式又分為餓漢式和懶漢式。1.餓漢式 public class singleton 靜態工廠方法 public static singleton getinstance 單例類的乙個最重要的特點是類的構造器是私有的...
單例模式介紹
簡單來說就是建立物件時無論怎麼建立都只有乙個例項物件 介紹 只有在用到這個物件的時候才會去建立這個物件。存在問題 執行緒不安全,當使用多執行緒時會出現建立多個物件的情況。演示 public class bbb 建立靜態bbb物件 private static bbb bbb null 建立獲得bbb...
單例模式簡單介紹
單例模式 確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。特點 1.建構函式不對外開放,一般為private 2.通過乙個靜態方法或者列舉返回單例類物件 3.確保單例類的物件有且只有乙個,尤其是在多執行緒環境下。4.確保單例類物件在反序列化時不會重新構建物件。2.1 餓漢式 在宣告...