單例模式要點:
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一書中把單例模式歸類為 建立型 模式,意圖是在表明單例物件承擔了其他物件所要依賴的職責。單例模式的優點 在...