JUC之讀寫鎖

2021-10-03 14:21:34 字數 1239 閱讀 4127

是什麼?

讀寫分離的鎖。

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...