最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

DEVLOG 9.24 Kotlin 去糖化(1)object 和單例模式

2021-09-24 14:50 作者:房頂上的鋁皮水塔  | 我要投稿

餓漢式單例模式

使用object 關(guān)鍵字在Kotlin中可以定義一個基本的餓漢式單例模式。

餓漢式單例模式:因為很餓,上來就要吃!
類初始化時就初始化,單例為final。餓漢式是線程安全的

反編譯的字節(jié)碼:

懶漢式單例模式

懶漢式單例模式:懶漢很懶,只有當(dāng)單例沒有初始化時才進(jìn)行初始化。

是一種懶加載的模式,這種模式不是線程安全的

這種方式不是線程安全的,假設(shè)存在兩條線程,Thread1判斷singleton=null為true之后切換到Thread2,Thread2判斷single==null 為true之后重復(fù)創(chuàng)建Singleton對象。之后當(dāng)使用權(quán)再次交給Thread1時,創(chuàng)建的兩個對象并不是同一個。

使用同步鎖保證懶漢式線程安全:

使用同步鎖使得當(dāng)前的線程如果要訪問這個方法需要等上個線程結(jié)束。

使用雙重校驗鎖實現(xiàn)單例模式


實現(xiàn)Java版本的雙重校驗鎖需要注意兩個問題

  1. 單例變量需要加上volatile

  2. 雙重校驗鎖的寫法

實現(xiàn)Kotlin版本的時候直接可以將單例變量使用委托的方式實現(xiàn)。


lazy {} 會將傳入的initializer根據(jù)設(shè)置的mode初始化變量

雙重校驗鎖的實現(xiàn)就在SynchronizedLazyImpl中。并且這里的by(委托語法)實際上是一個表達(dá)式:


DEVLOG 9.24 Kotlin 去糖化(1)object 和單例模式的評論 (共 條)

分享到微博請遵守國家法律
彭阳县| 揭阳市| 靖西县| 吴桥县| 丰镇市| 滨州市| 玉溪市| 乐业县| 攀枝花市| 新丰县| 柞水县| 临汾市| 石屏县| 贡嘎县| 保康县| 淮南市| 墨玉县| 朝阳区| 宁晋县| 余庆县| 池州市| 盐源县| 亳州市| 达拉特旗| 宝应县| 临泉县| 上犹县| 克什克腾旗| 栖霞市| 修水县| 涡阳县| 武隆县| 双牌县| 浦北县| 上杭县| 台南县| 云林县| 盐源县| 贵州省| 天峨县| 饶平县|