Udemy Course Multithreading, Concurrency & Performance 26

進階locking-ReentrantReadWriteLock實際範例

ZONGRU Li
Sep 17, 2021

為了簡單演練ReentrantReadWriteLock與前面介紹的普通Lock做效能比對

由於Code稍微複雜,先由以下說明解釋

考量一個簡單的資料為物品數量及該物品的價值資料結構

起始是空的

會用一個TreeMap物件來儲存多少價值(KEY),目前有多少數量(Value)

會在開始時先隨機地初始化不同價值的物品數量

接著會建置兩種Thread

一種是Write Thread(Only ONE)

隨機地增加隨機價值的物品數量+1

並且也隨機地增加隨機價值的物品數量-1

另一種是Read Thread(會有七個這樣的Thread)

瘋狂地多重迴圈地持續統計隨機價值區間的物品總數量

兩種Thread都會設Daemon為true(i.e.隨著Main Thread結束就跟著結束)

會先讓Write Thread建立好就先跑

七個Read Thread放後面跑,前後加上系統時間,並且加join()

亦即這7個Thread一定跑完才結束Main Thread

並在Write Thread驅動的增加減少隨機價值物品數量邏輯加上普通Lock

且Read Thread驅動的計算價值區間內物品總數量也加上普通Lock

最後統計Read Thread前後系統時間差印出來

實際Code如下

目前Code:

由上普通的ReentrantLock來做得到的7個Reader Thread總耗時:

大概落在12XX毫秒

接著改造為ReentrantReadWriteLock:

再次執行得到:

多跑幾次看看...

真是太神了!!!

最終完整Code如下

不過記得上述場景是Reader數量遠多過Writer適用

還是要根據場景的判斷要用哪種Lock!

參考課程

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet