java併發-ReadWriteLock代碼理解

創建的ReadWriteLock需要使用兩個方法來繼續創造2個對象,分別是ReadLock和WriteLock。

這兩個鎖對象的方法調用都會匯聚到ReadWriteLock的Sync類中。多個對象的方法調用匯聚到一個對象上面,這個設計模式是?

1.當線程獲得寫鎖,那麼其他線程必須阻塞

2.當線程獲得讀鎖,那麼其讀線程可以獲得讀鎖,寫線程必須阻塞

採用一個同步隊列,如何保證讓不同類型的線程都停止下來呢?

如果一個線程要獲得讀鎖,那麼就先看頭結點是否是讀鎖,如果是,那麼可以獲得鎖。如果不是,那麼就阻塞自己。

如果一個線程要獲得寫鎖,那麼就先看頭結點是否是寫鎖,如果是,那麼就可以獲得鎖,不過不是,那麼就阻塞自己。

當一個線程釋放讀鎖,而沒有其他的線程獲得讀鎖,那麼就通知同步隊列的下一個線程,讓其醒來嘗試獲取鎖。如果有其他的線程持有讀鎖,那麼就什麼也不做,把自己移除同步隊列即可。

當一個線程釋放寫鎖,也是類似的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章