懶漢式模式的執行緒安全問題

2021-08-14 06:20:01 字數 1127 閱讀 6041

新建乙個單例模式類和乙個多執行緒測試類

public

class

test24

implements

runnable

public

static

void

main(string args)

} class testsingleton

public

static testsingleton getinstance()

return testsingleton;

} }

執行後發現會產生兩個新的物件。控制台列印:

建新的物件  

建新的物件

com.testsingleton

@328d5485

com.testsingleton

@5ca801b0

說明有執行緒併發訪問安全問題,獲取的不是同乙個例項

使用同步鎖機制,最簡單的是在getinstance()方法上加synchronized關鍵字

public

static

synchronized testsingleton getinstance()

return testsingleton;

}

對於這種方式,有人覺得在多併發的情況下,每次獲取例項都要判斷鎖,效率比較低下,所以就有人想出了這樣的辦法,雙重判斷例項,這種大大減少判斷同步鎖的次數了。所以實際使用中可以推廣。

**如下:

public

static testsingleton getinstance()

} }

return testsingleton;

}

餓漢式:

public

class singleton

// 提供乙個全域性的訪問點來獲得這個"唯一"的物件

public

static singleton getinstance()

}

懶漢式模式類載入的時候就建立物件。

單例模式之懶漢式 》執行緒安全問題

package com.zzfl.pm1 zzfl 2019 8 11 public class singleton volatile 不穩定的,易揮發的。private static volatile singleton instance public static singleton getin...

解決單例設計模式中懶漢式執行緒安全問題

首先寫個單例 public class singledemo public static singledemo getinstance return s 寫個測試類 public class threaddemo3 執行結果一直都是true,說明單執行緒下是沒問題的,下面寫個多執行緒來訪問單例 pu...

idea多執行緒除錯懶漢式單例執行緒安全問題

四.結果 懶漢式單例如果沒有加鎖時,會產生執行緒安全問題。如下 public class lazysingleton public static lazysingleton instance null public static lazysingleton getinstance return in...