你的單例模式安全嗎?

2021-05-23 18:48:30 字數 920 閱讀 6482

單例模式,一般的單例模式可分為以下兩種:

1 餓漢式:

public class singleton

public singleton getinstance()

}  2  懶漢式:

public class singleton

return singleton;

}} 

安全分析:

1 從執行緒角度:

從執行緒角度看,我們會發現,餓漢式是執行緒安全的,在類建立的同時就已經建立好乙個靜態的物件供系統使用,以後不在改變,懶漢式如果在建立例項物件時不加上synchronized則會導致對物件的訪問不是執行緒安全的,所以在使用懶漢式時我們的考慮到執行緒安全問題

改進後的懶漢式:

public class singleton

return singleton;

}} 

2 從安全角度:

ok,執行緒安全我們解決了,但是對於有些對系統的安全要求再高些的那,比如:作業系統的許可權,

提醒下,在享有特權的客戶可以借助accessibleobject.setaccessible方法,通過反射機制來呼叫你的私有構造器。如果你的系統需要的安全級別比較高的話,為了抵禦這用攻擊,可以修改構造器,讓它在被要求建立第二個例項的時候丟擲異常。

3 從序列化角度:

我有時候會用到序列化,那怎樣保證單例模式的安全?難道就僅僅在宣告中加上」implements serializable「就可以?這不夠的,為了保證單列,我們還得宣告所有例項域都是瞬時的,並提供乙個readresolve方法,否則我們每次反序列化乙個序列化的例項時,都會建立乙個新例項,針對需要序列化的,我們可以加上這個方法:

private object readresolve(){

return singleton;

這只是我所想到和看到的,當然有不足之處還請大家多指教!

你的單例模式安全嗎

今天在寫乙個東西需要用的單例模式,一般的單列模式可分為以下兩種 1 餓漢式 public class singleton public singleton getinstance 2 懶漢式 public class singleton return singleton 安全分析 1 從執行緒角度 ...

你的單例模式真的是執行緒安全的嗎

在我們平時的專案中,單例模式是十分常見的設計模式,當然我們使用最多的是 懶漢式 public class singleton public static singleton getinstance return instance 在初始化的時候我們使用雙重判斷的方式來確保只會被初始化一次,看上去很完...

單例模式執行緒安全嗎《十二》

單例模式執行緒安全嗎?單例模式作為一種常見的設計模式,在程式中非常常見,主要是為了保證乙個類只有乙個唯一的物件。從簡單的 餓漢式 懶漢式 利用 synchronized 和 複雜的 雙重校驗dcl模式 是乙個考慮執行緒安全的過程那麼單例模式執行緒安全嗎 1.靜態的餓漢式單例模式是執行緒安全的 那非靜...