Udemy Course Multithreading, Concurrency & Performance 26
為了簡單演練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!