[python筆記] 單例的幾種實現(xiàn)方式(線程安全)

單例實現(xiàn)方式:

? ? ? ? 1.單例裝飾器;

? ? ? ? 2.使用類;

? ? ? ? 3.使用元類 ? ? ? ? ? ?


1.單例裝飾器(非線程安全)

? ? 通過裝飾器使一個類變成單例類,但是并非線程安全的,多線程狀態(tài)下,每個線程創(chuàng)建不同的實例,因為沒有加線程鎖,所以無法阻止其他線程創(chuàng)建新的實例,代碼如下:


調用多線程執(zhí)行函數(shù):


結果:




2.使用類的方式實現(xiàn)單例(非線程安全)


結果:



怎么實現(xiàn)單例線程安全,通常做法就是加線程鎖:


結果:


加了線程鎖后,可以實現(xiàn)創(chuàng)建單例線程安全;



3.使用元類


結果:


總結:

? ? ? ? 1.不管用什么方式實現(xiàn)單例,其主要邏輯都是判斷是否存在已經創(chuàng)建的實例,有就返回已經創(chuàng)建過的實例,沒就實例化一個實例并存儲起來;

? ? ? ? 2.單例在單線程模型下,是線程安全的,不管怎么樣創(chuàng)建實例,都有且只有一個,而面對多線程任務時,一般的單例代碼無法承擔多線程任務,當有io延時操作時,會生成id不同的實例,所以如果需要實現(xiàn)多線程單例,那么就在創(chuàng)建實例時增加線程鎖;

? ? ? ? 3.實現(xiàn)單例的方式不止三種,只要你抓住if判斷的主要邏輯點,就能實現(xiàn)單例,所以單例的實現(xiàn)方式是多種多樣的,這里列舉了比較常用的三種;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,724評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • 見證154群里的姐妹們好:真的感謝主借著這么好的平臺建立了這么多的群。有老師,有群主們的鼓勵。感謝主借著這些來改造...
    學做智慧女人閱讀 207評論 0 0
  • 不知道從什么時候開始 你會學著隔壁奶奶說一口地道的山東話兒 “來來來”說的可純正了 背著個小手往前走 嘴里還不時蹦...
    Melshow閱讀 224評論 0 1
  • 許多人認為感冒不能吃雞蛋 確實有專家指出少食雞蛋 才能有利于感冒恢復 其實除了雞蛋外 這幾類食物更要少碰! 感冒能...
    一米陽光xm閱讀 163評論 0 0

友情鏈接更多精彩內容