摘要:懶漢式線程安全在進(jìn)行類初始化的時(shí)候就實(shí)例化了餓漢式線程不安全的單列模式餓漢式線程安全的單列模式但是效率不佳因?yàn)樗械木€程都需要同步等待獲取單例對(duì)象餓漢式線程安全的單列模式效率由于上面一種餓漢的方式因?yàn)樗械木€程都需要同步等待獲取單例對(duì)象靜態(tài)
/**
懶漢式
*
線程安全,在進(jìn)行類初始化的時(shí)候就實(shí)例化了
*
*/
class Instance0 { private static Instance0 instance = new Instance0();; private Instance0(){} public static Instance0 getInstance() { return instance; } }
/**
餓漢式
*
線程不安全的單列模式
*
*/
class Instance1 { private static Instance1 instance; private Instance1(){} public static Instance1 getInstance() { if(instance == null) { instance = new Instance1(); } return instance; } }
/**
餓漢式
*
線程安全的單列模式, 但是效率不佳.
因?yàn)樗械木€程都需要同步等待獲取單例對(duì)象
*
*/
class Instance2 { private static Instance2 instance; private Instance2(){} public static synchronized Instance2 getInstance() { if(instance == null) { instance = new Instance2(); } return instance; } }
/**
餓漢式
*
線程安全的單列模式, 效率由于上面一種餓漢的方式.
因?yàn)樗械木€程都需要同步等待獲取單例對(duì)象
*
*/
class Instance3 { private static Instance3 instance; private Instance3(){} public static Instance3 getInstance() { if(instance == null) { synchronized(Instance3.class) { if(instance == null) { instance = new Instance3(); } } } return instance; } }
/**
靜態(tài)類
*
餓漢的方式來生成單例,在需要的時(shí)候才會(huì)進(jìn)行實(shí)例化.
*
JVM在創(chuàng)建新對(duì)象的時(shí)候主要經(jīng)歷三個(gè)步驟:
1.分配內(nèi)存
2.構(gòu)造函數(shù)內(nèi)存初始化
3.將對(duì)象指向分配的內(nèi)存地址
*
JVM會(huì)針對(duì)字節(jié)碼進(jìn)行調(diào)優(yōu),其中一項(xiàng)調(diào)優(yōu)便是跳轉(zhuǎn)指令的執(zhí)行順序,如果1->3->2的順序,上面的方式會(huì)出現(xiàn)在多線程訪問的過程中可能會(huì)出現(xiàn)莫名的錯(cuò)誤.
*
*/
class Instance4 { private static class InstanceHolder { private static final Instance4 instance = new Instance4(); private int a; } private Instance4(){} public static Instance4 getInstance() { return InstanceHolder.instance; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66688.html
摘要:總結(jié)單例是運(yùn)用頻率很高的模式,因?yàn)榭蛻舳藳]有高并發(fā)的情況,選擇哪種方式并不會(huì)有太大的影響,出于效率考慮,推薦使用和靜態(tài)內(nèi)部類實(shí)現(xiàn)單例模式。 單例模式介紹 單例模式是應(yīng)用最廣的模式之一,也可能是很多人唯一會(huì)使用的設(shè)計(jì)模式。在應(yīng)用單例模式時(shí),單例對(duì)象的類必須保證只用一個(gè)實(shí)例存在。許多時(shí)候整個(gè)系統(tǒng)只需要一個(gè)全局對(duì)象,這樣有利于我么能協(xié)調(diào)整個(gè)系統(tǒng)整體的行為。 單例模式的使用場(chǎng)景 確保某個(gè)類有且...
摘要:不符合設(shè)計(jì)模式中的單一職責(zé)的概念。引入代理實(shí)現(xiàn)單例模式引入代理實(shí)現(xiàn)單例模式的特點(diǎn)我們負(fù)責(zé)管理單例的邏輯移到了代理類中。的單例模式對(duì)比在以上的代碼中實(shí)現(xiàn)的單例模式都混入了傳統(tǒng)面向?qū)ο笳Z言的特點(diǎn)。 聲明:這個(gè)系列為閱讀《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》 ----曾探@著一書的讀書筆記 1.單例模式的特點(diǎn)和定義 保證一個(gè)類僅有一個(gè)實(shí)例,并且提供一個(gè)訪問它的全局訪問點(diǎn)。 2.傳統(tǒng)面向?qū)?..
摘要:但是,這并不是采用單例的唯一原因。使用命名空間單例模式也被稱為模塊設(shè)計(jì)模式。函數(shù)內(nèi)部聲明了一些局部函數(shù)和或變量。緊隨函數(shù)聲明放置即可立即執(zhí)行外部函數(shù),并將所得的對(duì)象文字費(fèi)賠給變量。 JavaScript設(shè)計(jì)模式-第一部分:?jiǎn)卫J?、組合模式和外觀模式 設(shè)計(jì)模式是一些可靠的編程方式,有助于保證代碼更加易于維護(hù)、擴(kuò)展及分離,所有設(shè)計(jì)模式在創(chuàng)建大型JavaScript應(yīng)用程序時(shí)均不可或缺 單...
摘要:如果需要防范這種攻擊,請(qǐng)修改構(gòu)造函數(shù),使其在被要求創(chuàng)建第二個(gè)實(shí)例時(shí)拋出異常。單例模式與單一職責(zé)原則有沖突。源碼地址參考文獻(xiàn)設(shè)計(jì)模式之禪 定義 單例模式是一個(gè)比較簡(jiǎn)單的模式,其定義如下: 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。 或者 Ensure a class has only one instance, and provide a global point of ac...
摘要:在設(shè)計(jì)模式一書中,將單例模式稱作單件模式。通過關(guān)鍵字,來保證不會(huì)同時(shí)有兩個(gè)線程進(jìn)入該方法的實(shí)例對(duì)象改善多線程問題為了符合大多數(shù)程序,很明顯地,我們需要確保單例模式能在多線程的情況下正常工作。 在《Head First 設(shè)計(jì)模式》一書中,將單例模式稱作單件模式。這里為了適應(yīng)大環(huán)境,把它稱之為大家更熟悉的單例模式。 一、了解單例模式 1.1 什么是單例模式 單例模式確保一個(gè)類只有一個(gè)實(shí)例,...
閱讀 3350·2021-11-15 11:37
閱讀 2515·2021-09-29 09:48
閱讀 3953·2021-09-22 15:55
閱讀 3066·2021-09-22 10:02
閱讀 2688·2021-08-25 09:40
閱讀 3292·2021-08-03 14:03
閱讀 1754·2019-08-29 13:11
閱讀 1617·2019-08-29 12:49