張小二求職記之 單例模式(三)之決戰多執行緒

2022-03-14 00:46:04 字數 2824 閱讀 6166

z;略懂

package

單例模式;

public

class

singleton

public

static

singleton getinstance()

return

instance;

}public

static

void

main(string args)

}).start();}}

}

部分結果如下,發現出現了不同的例項

例建構函式

單例建構函式

單例模式.singleton@75da931b

單例建構函式

單例建構函式

單例模式.singleton@34780af5

單例模式.singleton@34780af5

單例建構函式

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@34780af5

單例模式.singleton@2b1be57f

單例模式.singleton@157ee3e5

單例模式.singleton@2b1be57f

單例模式.singleton@60f00e0f

單例模式.singleton@157ee3e5

加入synchronized部分結果如下:全部都唯一啊,你自己試試。

例建構函式

單例模式.singleton@78214f6b

單例模式.singleton@78214f6b

單例模式.singleton@78214f6b

單例模式.singleton@78214f6b

單例模式.singleton@78214f6b

單例模式.singleton@78214f6b、

z:減少的所得粒度和上鎖的範圍。比如資料庫中有對錶 頁 行 加鎖,粒度低了,鎖的競爭就減少了。

比如在讀寫鎖,如果只有一種鎖的,那麼ss也是互斥的,通過將鎖分割成讀寫鎖,減少了競爭。

對於佇列解鎖,我可以設定頭設定乙個鎖,尾巴設定乙個鎖,這樣不就減小了鎖的粒度,

還有並行的hashmap、

z: 本文中synchronzide同步的粒度大,因為instance=!=null不用加鎖。

所以改造如下;

package

單例模式;

public

class

singleton

public

static

singleton getinstance()}}

return

instance;

}public

static

void

main(string args)

}).start();}}

}

第一步:只有為空才會進同步塊,說了,如果有了例項就直接返回結果

第二部:判斷為空:按照執行緒的不可確定性,兩個執行緒同時判斷

if(instance==null) 都會先後進入同步快,為出現建立兩個例項

package

單例模式;

public

class

singleton

public

static

singleton getinstance()

}return

instance;

}public

static

void

main(string args)

}).start();}}

}

結果出現重複

例建構函式

單例建構函式

單例模式.singleton@46993aaa

單例模式.singleton@52e5376a

單例模式.singleton@46993aaa

單例模式.singleton@46993aaa

單例模式.singleton@46993aaa

單例模式.singleton@46993aaa

單例建構函式

單例模式.singleton@157ee3e5

單例模式.singleton@46993aaa

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單例模式.singleton@157ee3e5

單m:z:

設計模式之單例模式(二)

單例模式 顧名思義,單例模式就是保證某個類只有乙個例項。在計算機系統中,執行緒池 快取 日誌物件 對話方塊 印表機 顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干個印表機,但只能有乙個printer spooler,以避免兩個列印作業同時輸出到印表機...

php設計模式三之單例模式

建立型模式 單例模式 單例模式 取得某個類的唯一例項 應用場景 需要乙個全域性的物件 比如配置類 共享的資源 比如事件佇列 class single class singleton return static instance public function show private functio...

python設計模式之單例模式(二)

上次們討論的是gof的單例設計模式,該模式是指 乙個類有且只有乙個物件。通常我們需要的是讓例項共享乙個相同的裝態 比如資料庫連線。alex martelli的建議的是開發人員應該關注狀態和行為,而不是同一性,因此它也被稱為monostate 單態 模式。先說說 monostate 這個單詞的意思,設...