如果說設計模式也有知名度排名,個人覺得單例模式應該排到第一名。單例模式說簡單也簡單,說難也難,主要在於不同情況之下應該有不同的選擇。
單例特點
餓漢模式(執行緒安全)
public
class
singletondemo
public
static singletondemo getsingleton()
建構函式私有化,這個是常規操作。如果建構函式不私有化,那就可以隨時隨地new乙個物件,違背了單例的初衷。
懶漢模式(執行緒不安全)
public
class
singletondemo
public
static singletondemo getsingleton()
return singleton;}}
這是教科書上面標準的懶漢模式**,按需載入。這段**單執行緒沒有任何問題,多執行緒就會出現問題,如圖所示,會產生兩個例項。
懶漢模式(執行緒安全)
public
synchronized
static singletondemo getsingleton()
return singleton;
}
直接對這個方法加鎖,簡單粗暴的同步方式,但後續的訪問每次都需要競爭鎖,開銷比較大,這是不必要的開銷,就有了新的加鎖方式—雙重鎖。
雙重鎖模式(執行緒安全)
public
static singletondemo getsingleton() }}
return singleton;
}
這種方式有效的避免了後續競爭鎖的開銷,只有第一次初始化的時候競爭鎖,對上一段**優化。
靜態內部類(執行緒安全)
public
static singletondemo getsingleton()
private
static
class
singletonholder
這是利用內部類載入特點實現的執行緒安全性。
列舉單例(執行緒安全)
public
enum singleton
}
這是很多大牛都推薦的一種單例實現方式,這個模式單例可以完美避免所有問題,記住是所有問題,不僅僅是執行緒安全問題。利用了列舉的特性,完美實現了單例。
總結只追求技術的程式設計師不是好程式設計師的,正所謂沒有最優的選擇,只有最合適的選擇,沒有場景需要的技術選型,都是耍流氓的。
java設計模式之單例模式
單位面試題目中有一道關於單例模式的題目.大多數參加筆試的同事都會寫出getinstance這個函式,但是當我問起什麼情況下需要使用單例 單例具體有什麼好處的時候 static函式也可以構建唯一例項,為什麼還需要單例.從使用單例的經驗來看,如下場景下,個人感覺應該使用單例 1.如果需要構建乙個工具類,...
java設計模式 之 單例模式
單例模式 有些類在程式執行過程中只需要儲存乙個例項,比如檔案管理類,音訊管理類,那麼我們如何實現乙個單例類呢?有以下幾點 1 定義乙個靜態變數 2 建構函式私有化 3 提供乙個public 靜態方法,獲取這個例項 4 一定要做執行緒同步 public static class singleton p...
Java設計模式之單例模式
說到單例模式 大家一定非常熟悉 這是最常見也是設計模式中相對簡單 好理解的設計模式 今天就跟大家掰一掰單例模式 單例模式確保某個類只有乙個例項 應用場景 執行緒池 快取 等物件常常被設計成單例 然而單例分兩種 1 惡漢式 2 懶漢式 我們先來看下 惡漢式 public class singleton...