單例模式之懶漢式(多線程安全復現(xiàn))

懶漢式單單線程下的實現(xiàn)

package com.wangming.pattern.creational.singleton;

/**
 * @Auther: ming.wang
 * @Date: 2019/1/6 19:25
 * @Description:
 */

public class LazySingleton {
    private static LazySingleton lazySingleton=null;
    private LazySingleton() {
    }

    public static LazySingleton getInstance(){
        if (null==lazySingleton)
        {
            lazySingleton=new LazySingleton();
        }
        return lazySingleton;
    }
}

上述代碼在單線程條件下是沒有問題的泡孩,但是在多線程下是無法保證線程安全的丽惭。讓我們使用一個實用技能多線程debug來復現(xiàn)一下這個問題。
讓我們寫一個測試類

package com.wangming.pattern.creational.singleton;

/**
 * @Auther: ming.wang
 * @Date: 2019/1/6 19:27
 * @Description:
 */
public class Test {
    public static void main(String[] args) {
//        LazySingleton lazySingleton = LazySingleton.getInstance();
        Thread t1 = new Thread(new T());
        Thread t2 = new Thread(new T());
        t1.start();
        t2.start();
        System.out.println("=========");
    }
}

class T implements Runnable {
    @Override
    public void run() {
        LazySingleton lazySingleton = LazySingleton.getInstance();
        System.out.println(Thread.currentThread().getName() + " " + lazySingleton);
    }
}

然后debug運行

那么問題出現(xiàn)了叮盘,我們改如何解決呢厢汹?其實很簡單,只要在getInstance方法加上synchronized關鍵字

public class LazySingleton {
    private static LazySingleton lazySingleton=null;
    private LazySingleton() {
    }

    public synchronized static LazySingleton getInstance(){
        if (null==lazySingleton)
        {
            lazySingleton=new LazySingleton();
        }
        return lazySingleton;
    }

通過加synchronized關鍵字塌西,這樣就解決了懶漢式在多線程下的問題了他挎。
我們知道同步鎖是比較耗資源的,那么我們有沒有優(yōu)化的余地了呢捡需?下篇文章办桨,咱們一起分析一下。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末站辉,一起剝皮案震驚了整個濱河市呢撞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饰剥,老刑警劉巖殊霞,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異汰蓉,居然都是意外死亡绷蹲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門顾孽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘸右,“玉大人娇跟,你說我怎么就攤上這事√” “怎么了苞俘?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長龄章。 經(jīng)常有香客問我吃谣,道長,這世上最難降的妖魔是什么做裙? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任岗憋,我火速辦了婚禮,結果婚禮上锚贱,老公的妹妹穿的比我還像新娘仔戈。我一直安慰自己,他們只是感情好拧廊,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布监徘。 她就那樣靜靜地躺著,像睡著了一般吧碾。 火紅的嫁衣襯著肌膚如雪凰盔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天倦春,我揣著相機與錄音户敬,去河邊找鬼。 笑死睁本,一個胖子當著我的面吹牛尿庐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呢堰,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抄瑟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了暮胧?” 一聲冷哼從身側響起锐借,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎往衷,沒想到半個月后钞翔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡席舍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年布轿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡汰扭,死狀恐怖稠肘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布锌奴,位于F島的核電站,受9級特大地震影響环揽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庵佣,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一歉胶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧巴粪,春花似錦通今、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晶通,卻和暖如春璃氢,著一層夾襖步出監(jiān)牢的瞬間哟玷,已是汗流浹背狮辽。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巢寡,地道東北人喉脖。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像抑月,于是被迫代替她去往敵國和親树叽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 概念 單例模式是一種常用的軟件設計模式谦絮。在應用這個模式時题诵,單例對象的類必須保證只有一個實例存在。本文就從單例模式的...
    Mr_Yangy閱讀 842評論 0 1
  • 1层皱、什么是單例模式 Java中單例模式是一種常見的設計模式性锭,單例模式的寫法有好幾種,這里主要介紹三種:懶漢式叫胖、餓漢...
    團長plus閱讀 614評論 0 0
  • 單例模式(Singleton Pattern)是眾多設計模式中較為簡單的一個草冈,同時它也是面試時經(jīng)常被提及的問題,如...
    廖少少閱讀 563評論 0 1
  • 在所有的設計模式中,單例模式是我們在項目開發(fā)中最為常見的設計模式之一怎棱,而單例模式有很多種實現(xiàn)方式哩俭,你是否都了解呢?...
    耶律棗閱讀 439評論 0 0
  • 寫在前面 前段時間在回顧 Java 當中的 23(泛指并非只有23) 種設計模式拳恋,最近又在學習 Kotlin 凡资,然...
    汪海游龍閱讀 1,967評論 0 2