摘要:急切的創(chuàng)建對象餓漢式以上爲?zhàn)I漢式單列設計,該設計是線程安全的,即不同的線程在調用時返回的是統(tǒng)一對象,在加載這個類時,馬上創(chuàng)建了這個類的唯一單列實列。
單件模式(JAVA實現(xiàn))
定義
單件模式: 確保一個類只有一個實列, 並提供一個全局訪問點
單件模式和全局變量的區(qū)別
若將對象賦值給一個全局變量, 則該對象需在程序開始時就創(chuàng)建好, 而改對象可能不會使用, 造成資源浪費, 而單件模式支持延遲實例化
即急切實例化 和 延遲實例化 的區(qū)別
單件模式
1 基本用法(懶漢式)class Singleton { private static Singleton singleton; private Singleton(){}; public static Singleton getInstance() { if (null == singleton) { singleton = new Singleton(); } return singleton; } }
以上爲單列模式的懶漢式設計
該設計時線程不安全的, 即當不同的線程調用getInstance時, 返回不同的對象。
2 急切的創(chuàng)建對象(餓漢式)class Singleton { private static Singleton singleton = new Singleton(); private Singleton(){}; public static Singleton getInstance() { return singleton; } }
以上爲?zhàn)I漢式單列設計, 該設計是線程安全的, 即不同的線程在調用getInstance時返回的是統(tǒng)一對象,
同步 synchronizedJVM在加載這個類時, 馬上創(chuàng)建了這個類的唯一單列實列。
其實, 只要把getInstance變成同步的, 就能解決懶漢式線程不安全這一不足,
設計如下:
class Singleton { private static Singleton singleton; private Singleton(){}; public static synchronized Singleton getInstance() { if (null == singleton) { singleton = new Singleton(); } return singleton; } }
以上爲加鎖了的懶漢式單列設計, 該設計是線程安全的, 不同的線程在調用getInstance時, 返回唯一對象,
雙重檢查加鎖但是, 後續(xù)每一次調用getinstance時,都會進入同步鎖, 同步會降低性能, 這是真的, 尤其是當該類用於很多業(yè)務邏輯時,
用雙重檢查加鎖, 在getInstance中減少使用同步
class Singleton { private volatile static Singleton singleton; private Singleton(){}; public static Singleton getInstance() { if (null == singleton) { synchronizend(Singleton.class) { if (null == singleton) { singleton = new Singleton(); } } } return singleton; } }
需java版本>=1.5, 地版本不支持volatile關鍵字
以上即爲雙重檢查加鎖, 該設計能大大的減少getInstance的性能消耗,
準備是用php來實現(xiàn)的, 但是發(fā)現(xiàn)php暫不支持同步代碼快, 此處採用java實現(xiàn)了
轉載請著名出處,godruoyi
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/66051.html
摘要:尤其是喬布斯在年發(fā)布的一篇的文章。喬布斯在里面寫下了關于的一點看法,說明自己為什么不使用,談到關于的一些問題,比如開放性,安全性,對于設備續(xù)航的影響,不利于觸摸屏,等等。終于,于年月日,爸爸也放棄治療了,宣布將于年正式退休。 今天為大家分享一下html5中的視頻(video)與音頻(audio)。在進入主題之前我們先了解一下Flash與html5這兩種技術的時代背景與發(fā)展歷史。 1.前...
摘要:尤其是喬布斯在年發(fā)布的一篇的文章。喬布斯在里面寫下了關于的一點看法,說明自己為什么不使用,談到關于的一些問題,比如開放性,安全性,對于設備續(xù)航的影響,不利于觸摸屏,等等。終于,于年月日,爸爸也放棄治療了,宣布將于年正式退休。 今天為大家分享一下html5中的視頻(video)與音頻(audio)。在進入主題之前我們先了解一下Flash與html5這兩種技術的時代背景與發(fā)展歷史。 1.前...
摘要:尤其是喬布斯在年發(fā)布的一篇的文章。喬布斯在里面寫下了關于的一點看法,說明自己為什么不使用,談到關于的一些問題,比如開放性,安全性,對于設備續(xù)航的影響,不利于觸摸屏,等等。終于,于年月日,爸爸也放棄治療了,宣布將于年正式退休。 今天為大家分享一下html5中的視頻(video)與音頻(audio)。在進入主題之前我們先了解一下Flash與html5這兩種技術的時代背景與發(fā)展歷史。 1.前...
摘要:我們將通過一個構造函數(shù)創(chuàng)建的對象,稱為是該類的實例孫悟空男玉兔精女奔波霸男使用可以檢查一個對象是否是一個類的實例語法對象構造函數(shù)如果是,則返回,否則返回所有的對象都是的后代,所以任何對象和做檢查時都會返回 使用對象字面量模式來創(chuàng)建一個對象 (它也叫單例模式 //JS與其他語言的單例模式有很大的區(qū)別(如Java),但這就是語言的區(qū)別) var obj = {}; ...
閱讀 1090·2021-10-14 09:42
閱讀 1387·2021-09-22 15:11
閱讀 3295·2019-08-30 15:56
閱讀 1258·2019-08-30 15:55
閱讀 3623·2019-08-30 15:55
閱讀 898·2019-08-30 15:44
閱讀 2034·2019-08-29 17:17
閱讀 2081·2019-08-29 15:37