單例模式線程安全,單例模式:懶漢式和餓漢式(個人理解)

 2023-11-22 阅读 33 评论 0

摘要:懶漢式 /*** 懶漢式單例模式概念:* 不主動創建,在沒有的情況下才會創建唯一實例,并且對象私有,構造私有*/ public class SingletonLan {/*** 私有的對象* 加volatile 提供可見性* 所謂可見性,我的理解就是多個線程操作同一對象時,一

懶漢式

/*** 懶漢式單例模式概念:*      不主動創建,在沒有的情況下才會創建唯一實例,并且對象私有,構造私有*/
public class SingletonLan {/*** 私有的對象*  加volatile 提供可見性*      所謂可見性,我的理解就是多個線程操作同一對象時,一旦對象發生改變,其余線程立馬可見。*      并發情況下 ,此時A線程進入了雙重檢查鎖去實例化對象*      線程B在鎖外等候,線程A實例化完對象后往下執行,但是此時線程B是不知道線程A已經*      實例化出對象了,所有線程B會接著進同步鎖去實例化,那就違背單例模式,所有需要*      加volatile關鍵字*/private static volatile SingletonLan singletonLan = null;/*** 私有構造  防止被new 對象*/private SingletonLan() {}/*** 對外暴露的獲取實例* @return*/public static SingletonLan getInstance(){//  雙重檢查鎖if(singletonLan==null){//確認當前實例為空的情況下 進入鎖synchronized (singletonLan.getClass()){/*** 再在鎖中確認此時只有一個線程進來 并且該線程實例為null  創建對象*  (如果沒有加鎖 有多個線程同時進入這個if內去實例化對象 可能造成多個對象的生成 不符合單例模式)*/if (singletonLan == null){singletonLan = new SingletonLan();}}}return singletonLan;}
}

餓漢式

/*** 餓漢式單例模式概念*      顧名思義,餓漢式比較著急,所有直接就會給出唯一實例,我稱之為 白給*      注意 對象以及構造也都是私有*/
public class SingletonHungry {/*** 私有且靜態的對象*      類實例化時創建  線程安全*/private final static SingletonHungry singleton = new SingletonHungry();/*** 私有構造 防止外部 new*/private SingletonHungry(){}/*** 對外暴露的獲取實例* @return*/public static SingletonHungry getInstance(){return singleton;}
}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/186838.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息