java 單例模式

2021-08-08 07:17:34 字數 2067 閱讀 7119

單例模式要點:

1.整個系統中只能存在乙個

單例的作用:

1.控制資源,可以通過執行緒控制,控制資源併發

2.減少new的次數,節約資源

3.可共享物件,共享資料,達到程式間通訊的效果

如:private static jdbcutil instance=null;

//此處用到延遲載入,有是構造乙個類的代價很大,用到他時再去構造他。

private jdbcutilsing(){}

public static jdbcutilsing getinstance() }}

return instance;

}單例寫法有很多,根據不同的需求有不同的寫法,而單例的核心在於通過乙個介面返回唯一的物件例項,通常一些管理器和控制器會被設計成單例

1.餓漢模式

public

class

singleton  

public

static

singleton newinstance()  

}這個單例必須要有個private訪問級別的建構函式,才能保證不會被系統中的其他**例項話,其次是instance成員變數和newinstance必須是static的。

但是這個單例唯一不足的是無法對instance例項做延遲載入,無論單例用到與否,都會被建立出來。單如果單例記憶體占用較大或者只在某個特定場合下用到,使用這個單例就不合適了。

2.懶漢模式

public

class

singleton  

public

static

singleton newinstance()  

return

instance;  

}  }  

這個單例做了延遲載入,用到的時候才會去建立。如果單例用的較少,佔資源較多的話,懶漢單例模式很適合。但是懶漢單例並沒有考慮到執行緒併發問題。在多個執行緒下可能多會建立多個例項。

3.加同步鎖(synchronized)

public

class

singleton   

public

static

singleton getinstance()   

}  }  

return

instance;  

}  }  

這裡即實現了延遲載入,又控制了多個執行緒建立例項的問題。但是這裡還會引發乙個新的問題,就是物件還沒有被初始化,緊接著另外乙個執行緒又來呼叫getinstance()。導致了instance物件取到的狀態不明確,導致程式錯誤。

public

class

singleton  

public

static

synchronized

singleton newinstance()  

return

instance;  

}  }  

這種方法雖然可以避免上面的問題,單卻存在了效能問題。所以為了解決以上兩種問題,可以用volatile關鍵字。

public

class

singleton   

public

static

singleton getinstance()   

}  }  

return

instance;  

}  } 

4.靜態內部類

public

class

singleton  

private

singleton(){}  

public

static

singleton newinstance()  

} 這種方式延遲載入的同時還保證了執行緒安全,推薦使用。

5.列舉單例

public enum something

public singleton getinstance() }

文章:

java單例模式

第一種方法 public class singleton private static singleton singleton new singleton public static singleton getinstance 第二種方法 public class singleton private...

Java 單例模式

單例模式特點 1 單例類只能有乙個例項。2 單例類必須自己自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。一 餓漢式單例 基於classloder機制避免了多執行緒的同步問題,使用較多 public class singleton 這裡提供了乙個供外部訪問本class的靜態方法,可...

Java單例模式

單例模式的意圖是為了確保乙個類有且僅有乙個例項,並為它提供乙個全域性訪問點。單例模式通過隱藏建構函式,提供物件建立的唯一入口點,從而將類的職責集中在類的單個例項中。design patterns一書中把單例模式歸類為 建立型 模式,意圖是在表明單例物件承擔了其他物件所要依賴的職責。單例模式的優點 在...