獨占鎖 和 共享鎖


 
        

獨占鎖:獨占鎖也叫排他鎖,是指該鎖一次只能被一個線程所持有。如果線程T對數據A加上排他鎖后,則其他線程不能再對A加任何類型的鎖。獲得排它鎖的線程即能讀數據又能修改數據。
    ReentrantLocksynchronized 都是獨占鎖

共享鎖:共享鎖是指該鎖可被多個線程所持有。如果線程T對數據A加上共享鎖后,則其他線程只能對A再加共享鎖,不能加排它鎖。獲得共享鎖的線程只能讀數據,不能修改數據。

            獨享鎖與共享鎖也是通過AQS來實現的,通過實現不同的方法,來實現獨享或者共享。

              ReentrantReadWriteLock:讀鎖是共享鎖,寫鎖是獨占鎖。讀鎖的共享可以保證並發讀是高效的,讀寫,寫讀,寫寫是互斥的

 

 


ReentrantReadWriteLock源碼:

構造器無參數,默認是創建一個非公平鎖;

 

 

我們看到 ReentrantReadWriteLock 有兩把鎖:ReadLock 和 WriteLock,見名知意,一個讀鎖一個寫鎖, 合稱“讀寫鎖”。
再進一步觀察可以發現 ReadLock 和 WriteLock 是靠內部類 Sync 實現的鎖。
Sync 是 AQS 的一個子類,這種結構在 CountDownLatch 、ReentrantLock 、Semaphore 里面也都存在。
在ReentrantReadWriteLock 里面,讀鎖和寫鎖的鎖主體都是 Sync ,但讀鎖和寫鎖的加鎖方式不一樣。
讀鎖是共享鎖,寫鎖是獨占鎖。讀鎖的共享鎖可保證並發讀非常高效,而讀寫、寫讀、寫寫的過程互斥,因為讀鎖和寫鎖是分離的。所以ReentrantReadWriteLock的並發性相比一般的互斥鎖有了很大提升。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM