Java 之單例模式

2021-09-13 13:52:12 字數 1079 閱讀 6850

單例模式,又稱單件模式。單例模式的目的就是為了保證乙個類只有乙個例項。

下面我們來寫乙個簡單的單例模式的code吧 

public class singleton

public static singleton getinstance()

return myinstance;

}}

以上就是乙個簡單的單例模式,它可以滿足單執行緒對於只建立乙個例項的需求 。

但是 ,當多執行緒呼叫getinstance方法的時候 ,如果 myinstance都是 null,有可能會建立兩個或多個 sintleton例項。

這時候 ,我們就要考慮多執行緒下怎樣去滿足只建立乙個例項的需求 。

這時候就想到了synchronized關鍵字。

public class singleton

public static synchronized singleton getinstance()

return myinstance;

}}

這樣完全可以解決多執行緒下只建立乙個例項的問題。但是,同步會降低程式的效能 ,同步乙個方法可能造成程式執行效率下降100倍。並且,同步只需要myinstance是null的時候同步,一旦例項化之後,就不再需要同步了。

有什麼 優化的方法嗎?

可以在類載入的時候就直接例項化 。

public class singleton

public static synchronized singleton getinstance()

}

如果我們想延遲載入,可以使用雙重檢查加鎖的方式

public class singleton

public static singleton getinstance()

}} return myinstance;

}}

volatile 關鍵字保證了當myinstance變數被初始化成sintleton例項時,多個執行緒正確地處理myinstance變數。

java設計模式之單例模式

單位面試題目中有一道關於單例模式的題目.大多數參加筆試的同事都會寫出getinstance這個函式,但是當我問起什麼情況下需要使用單例 單例具體有什麼好處的時候 static函式也可以構建唯一例項,為什麼還需要單例.從使用單例的經驗來看,如下場景下,個人感覺應該使用單例 1.如果需要構建乙個工具類,...

java設計模式 之 單例模式

單例模式 有些類在程式執行過程中只需要儲存乙個例項,比如檔案管理類,音訊管理類,那麼我們如何實現乙個單例類呢?有以下幾點 1 定義乙個靜態變數 2 建構函式私有化 3 提供乙個public 靜態方法,獲取這個例項 4 一定要做執行緒同步 public static class singleton p...

Java設計模式之單例模式

說到單例模式 大家一定非常熟悉 這是最常見也是設計模式中相對簡單 好理解的設計模式 今天就跟大家掰一掰單例模式 單例模式確保某個類只有乙個例項 應用場景 執行緒池 快取 等物件常常被設計成單例 然而單例分兩種 1 惡漢式 2 懶漢式 我們先來看下 惡漢式 public class singleton...