是什麼?
讀寫分離的鎖。
locks包下的(lock、condition、readwritelock),裡面的readwritelock(讀寫鎖),維護了一對讀寫操作。讀的鎖可以共享(又叫共享鎖),寫的鎖獨佔(又叫獨佔鎖)。
即寫操作只能開始寫—>寫結束,中間不能插入任何寫的操作。
怎麼用?
如果沒有鎖的情況:
public
class
demo01).
start()
;}}}
class
mycache
// 寫操作 獨佔鎖
public
void
set(string key, object value)
}
結果為:
1寫操作開始了
1寫操作結束了
1讀操作開始了
2寫操作開始了
0寫操作開始了
3寫操作開始了
3寫操作結束了.
..
明顯2開始寫了,在結束之前插入了很多的其他操作。
加入讀寫鎖readwritelock readwritelock = new reentrantreadwritelock();
readwritelock是個介面,他的實現類是可重用的讀寫鎖reentrantreadwritelock()
class
mycache
catch
(exception e)
finally
}// 寫操作 獨佔鎖
public
void
set(string key, object value)
catch
(exception e)
finally
}}
結果為:
15寫操作開始了
15寫操作結束了
6寫操作開始了
6寫操作結束了
6讀操作開始了
13讀操作開始了
7讀操作開始了
7讀操作結束了
13讀操作結束了
能看到寫的操作都是開始和結束中間沒有別的操作,讀之間可以插入別的操作。
其實這裡的讀鎖有和沒有是一樣的,不過為了程式的規範性應該加上。
JUC之重入鎖ReentrantLock
重入鎖是一種遞迴無堵塞的同步機制。類似於synchronized,但是比synchronized更加的靈活,可自由選擇加鎖的位置。它有乙個與鎖相關的獲取計數器,如果擁有鎖的某個執行緒再次得到鎖,那麼獲取計數器加1,並且鎖需要被釋放兩次才能真正獲得釋放。重入鎖提供了兩種加鎖方式,公平鎖以及非公平鎖。預...
JUC個人學習筆記7 讀寫鎖
根據b站up主狂神說juc課程所寫的個人學習筆記 讀的時候可以多執行緒讀,寫的時候只能乙個寫 獨佔鎖 寫鎖 共享鎖 讀鎖 1.讀 讀 可以共存2.讀 寫 不能共存3.寫 寫 不能共存 public class readwritelockdemo string.valueof i start 讀取 f...
JUC學習之執行緒8鎖
介紹執行緒8鎖圍繞乙個題目展開,題目 列印的是 one 還是 two 1.兩個普通同步方法,兩個執行緒,列印?public class testthread8monitor start new thread new runnable start class number public synchro...