1. 程式人生 > >java單例模式的心得

java單例模式的心得

開發人員 性能 文章 人員 外部 訪問 單例 鎖定 初始化

  由於設計模式對於java高級開發人員來說是非常重要的,網上也有很多關於設計模式的文章,博客等。所以,首先我對相對簡單的單例模式做一個簡單的總結。

  一、實現方式

  單例模式的實現方式有3種,分別是餓漢式,懶漢式,IoDH這3種,下面分別介紹下每種的實現原理和優缺點。

  a)餓漢式

  實現原理:類具有一個靜態成員變量,且初始化的值是一個實例化的對象本身。

  優點:即使多線程並發訪問也可確保只有一個唯一的對象;在獲取對象時候,可以快速響應。

  缺點:類加載時就創建了對象,導致資源利用率不高。

  b)懶漢式

  實現原理:在靜態方法裏創建對象;成員變量用volatile修飾,方法用通過雙重檢查鎖定實現。

  優點:延遲加載,提升了內存資源利用率。

  缺點:因volatile關鍵字會屏蔽java虛擬機做的一些代碼優化,所以系統運行效率降低。

  

  c)IoDH (Initialization Demand Holder)

  實現原理:添加一個靜態內部類,在該內部類中創建單例對象,再將該單例對象通過getInstance()方法返回給外部使用,由Java虛擬機來保證其線程安全性。

  優點:延遲加載,既可以保證線程安全,又不影響系統性能。

  缺點:與語言本身的特性有關(因為由Java虛擬機來保證其線程安全性),很多面向對象語言不支持IoDH。

  二、單例模式應用場景

  數據庫連接池,線程池,日誌處理,計數器,sevice和dao通常也是單例的。

java單例模式的心得