国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Kotlin中單利常用的五種寫法

2024-07-21 23:03:46
字體:
來源:轉載
供稿:網友

前言

單利模式是寫代碼過程中不可避免用到的,下面我總結一下單利常用的五種寫法,話不多說了,來一起看看詳細的介紹吧

加載類時創建單利

Java實現

public class Config{ private static Config INSTANCE=new Config(); private Config(){ //構造函數 } public static Config getInstance(){ return INSTANCE; }}

Kotlin實現

object Config{}

上面這種寫法簡單粗暴,直接在加載類的時候創建,但這樣會拖慢啟動進程,因此,可以在用到的時候再加載,比如下面這種寫法

懶加載寫法

Java實現

public class Config{ private static Config INSTANCE; private Config(){ //構造函數 } public static Config getInstance(){ if(null==INSTANCE){ INSTSANCE=new Config(); } return INSTANCE; }}

Kotlin實現

public class Config{ companion object{ val instance by lazy(LazyThreadSafetyMode.NONE){  Config() } }}

懶加載雖然避免在加載類的時候創建,但是線程不安全,如果同時多個類獲取單利,有可能會創建多個單利,因此可以在創建單利的時候加線程鎖,比如下面這種寫法:

同步鎖寫法

Java實現

public class Config{ private static Config INSTANCE; private Config(){ //構造函數 } public static synchronized Config getInstance(){ if(null==INSTANCE){  INSTANCE=new Config(); } return INSTANCE; }}

Kotlin實現

class Config{ companion object{ private var instance:Config?=null @Synchronized fun get():Config{  if(nnull==instance) instance=Config()  return instance } }}

同步鎖避免單利不會被重復創建,但是同步鎖

雙重校驗寫法

Java實現

public class Config{ private static volatile Config INSTANCE; private Config(){ //構造函數 } public static Config getInstance(){ if(null==INSTANCE){  synchronized(Config.class){  if(null==INSTANCE){   INSTSANCE=new Config();  }  } } return INSTANCE; }}

Kotlin實現

class Config{ companion object{ val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED){  Config() } }}

靜態內部類寫法

這種寫法避免了類加載的時候初始化單利,同時將同步鎖問題交給虛擬機處理,算得上是最優雅的寫法,Java和Kotlin寫法幾乎是一模一樣

Java實現

public class Config{ private static class Helper{ private static Config INSTANCE=new Config(); } private Config(){ //構造函數 } public static Config getInstance(){ return Helper.INSTANCE; }}

Kotlin實現

class Config private constructor(){ companion object{ fun getInstance = Helper.instance } private object Helper{ val instance = Config() }}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西藏| 莒南县| 哈巴河县| 宁河县| 横峰县| 阳山县| 汝州市| 海口市| 镇沅| 通许县| 清河县| 安陆市| 宁城县| 曲沃县| 江山市| 长宁县| 灵川县| 营山县| 凤城市| 融水| 米林县| 乐安县| 仁怀市| 北票市| 德清县| 茌平县| 镇巴县| 广西| 望都县| 高淳县| 阜平县| 彭水| 新平| 阳原县| 黄大仙区| 蚌埠市| 曲水县| 陈巴尔虎旗| 沂南县| 射洪县| 临沧市|