懶漢式
/*** 懶漢式單例模式概念:* 不主動創建,在沒有的情況下才會創建唯一實例,并且對象私有,構造私有*/
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;}
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态