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