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