国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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 和單例模式的評論 (共 條)

分享到微博請遵守國家法律
哈巴河县| 伊吾县| 双流县| 连南| 乌兰县| 呼玛县| 刚察县| 山东| 湖北省| 黎城县| 灵山县| 米易县| 四平市| 宣恩县| 儋州市| 南川市| 元朗区| 内江市| 治多县| 安义县| 漠河县| 阿巴嘎旗| 武乡县| 汕尾市| 滕州市| 响水县| 平顺县| 阿合奇县| 申扎县| 同心县| 襄汾县| 永吉县| 望城县| 灵石县| 工布江达县| 通州市| 阿勒泰市| 阿拉善左旗| 会泽县| 鹤山市| 昌平区|