ReentrantReadWriteLock的特性
1.公平性和非公平性獲取鎖:
支持按照公平的原則獲取鎖,即讀寫線程按照最長(zhǎng)等待時(shí)間分配鎖
若構(gòu)造為非公平性的,則按照先到先得的順序,但是有讀線程想獲取鎖時(shí),該順序被打破
2.重復(fù)獲得鎖:讀線程可以重復(fù)的獲取鎖,盡管當(dāng)前讀線程占用
3.鎖降級(jí):
可以將write lock 的等級(jí)降為 read lock ,順序是:先獲得WriteLock再獲得ReadLock,然后釋放WriteLock,這時(shí)候線程將保持Readlock的持 有。
反過(guò)來(lái)ReadLock想要升級(jí)為WriteLock則不可能
4.中斷鎖的獲取:讀鎖和寫鎖的獲取期間都允許被中斷
5.Condition 類的支持:該支持僅僅就寫操作而言,若readLock(0.newCondition() 將會(huì)throws UnsupprotedoperationException
6.可監(jiān)測(cè)性:這個(gè)類支持操作是否對(duì)鎖的獲取還是競(jìng)爭(zhēng),只是為檢測(cè)系統(tǒng)狀態(tài),而不是為了同步而設(shè)計(jì)的。
顯式鎖(Lock)和隱式鎖(Synchronized)的不同點(diǎn),括號(hào)注明隱式鎖與重復(fù)讀寫鎖(ReentrantReadWriteLock)的區(qū)別
1.不能主動(dòng)中斷正在試圖獲得鎖的線程 (顯式寫操作鎖可以主動(dòng)的掛起讀操作鎖,進(jìn)行寫操作)
2.試圖獲得鎖時(shí)不能設(shè)置超時(shí)
3.在對(duì)象內(nèi)部鎖只有一個(gè)并且內(nèi)部鎖只有一個(gè)單一的條件,可能不夠用(顯示鎖可以有多個(gè),不斷重復(fù)的對(duì)讀寫操作加鎖)
對(duì)ReentrantReadWriteLock類測(cè)試
1.讀/寫操作的鎖多線程測(cè)試 : 單獨(dú)的讀操作和寫操作何以完成讀或?qū)懙耐?/p>
2.讀操作所和寫操作鎖多線程測(cè)試 : 能同步 (必需操作類中將 ReentrantReadWriteLock聲明為static的成員變量)
3.讀操作進(jìn)程和寫操作進(jìn)程間測(cè)試:不支持進(jìn)程間的同步