java線程安全的單例代碼 Java線程安全的單例模式
1. 線程安全的單例模式概述 單例模式是一種常用的設(shè)計模式,它能夠確保一個類只有一個實例對象,并提供全局訪問點。然而,在多線程環(huán)境下使用單例模式時,需要注意線程安全性,以避免多個線程同時創(chuàng)建多個實例
1. 線程安全的單例模式概述
單例模式是一種常用的設(shè)計模式,它能夠確保一個類只有一個實例對象,并提供全局訪問點。然而,在多線程環(huán)境下使用單例模式時,需要注意線程安全性,以避免多個線程同時創(chuàng)建多個實例對象。
2. 單例模式的經(jīng)典實現(xiàn)方式
2.1 餓漢式
餓漢式是最簡單的一種實現(xiàn)方式,它在類加載時就創(chuàng)建了實例對象,并通過靜態(tài)方法提供訪問點。
public class Singleton {
private static final Singleton instance new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
餓漢式的實現(xiàn)方式簡單直接,但無法進(jìn)行延遲加載,會在類加載時就創(chuàng)建實例對象。
2.2 懶漢式(雙重檢查鎖)
懶漢式采用延遲加載的方式,在第一次使用時才創(chuàng)建實例對象。為了保證線程安全性,需要采用雙重檢查鎖機(jī)制。
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance null) {
synchronized () {
if (instance null) {
instance new Singleton();
}
}
}
return instance;
}
}
通過使用volatile關(guān)鍵字和雙重檢查鎖機(jī)制,可以確保在多線程環(huán)境下獲取到正確的唯一實例對象。
3. 其他線程安全的單例模式實現(xiàn)方式
3.1 靜態(tài)內(nèi)部類
靜態(tài)內(nèi)部類方式采用類的靜態(tài)成員變量來持有實例對象,通過靜態(tài)內(nèi)部類的延遲加載特性,可以在多線程環(huán)境下安全地獲取單例實例。
public class Singleton {
private static class SingletonHolder {
private static final Singleton instance new Singleton();
}
private Singleton() {}
public static Singleton getInstance() {
return ;
}
}
3.2 枚舉
枚舉方式是最簡潔和安全的單例實現(xiàn)方式,枚舉成員在類加載時就被創(chuàng)建,并且保證在多線程環(huán)境下只有一個實例對象。
public enum Singleton {
INSTANCE;
// 單例對象的其他方法
}
4. 總結(jié)
本文介紹了Java中線程安全的單例模式,并提供了多種實現(xiàn)方式,包括餓漢式、懶漢式(雙重檢查鎖)、靜態(tài)內(nèi)部類和枚舉。在多線程環(huán)境下,使用線程安全的單例模式能夠確保只有一個實例對象被創(chuàng)建和訪問,從而避免多個線程同時創(chuàng)建多個實例對象的問題。
參考鏈接:
- Java單例模式詳解:
- Java并發(fā)編程實戰(zhàn):