第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Java 讀寫鎖 ReentrantReadWriteLock 源碼分析

標(biāo)簽:
Java

下面这个例子非常实用,我是 javadoc 的搬运工:

// 这是一个关于缓存操作的故事

classCachedData{

    Object data;

volatileboolean cacheValid;

// 读写锁实例

final ReentrantReadWriteLock rwl =newReentrantReadWriteLock();

voidprocessCachedData(){

// 获取读锁

rwl.readLock().lock();

if(!cacheValid) {// 如果缓存过期了,或者为 null

// 释放掉读锁,然后获取写锁 (后面会看到,没释放掉读锁就获取写锁,会发生死锁情况)

            rwl.readLock().unlock();

rwl.writeLock().lock();

try{

if(!cacheValid) {// 重新判断,因为在等待写锁的过程中,可能前面有其他写线程执行过了

                    data = ...

cacheValid =true;

                }

// 获取读锁 (持有写锁的情况下,是允许获取读锁的,称为 “锁降级”,反之不行。)

rwl.readLock().lock();

}finally{

// 释放写锁,此时还剩一个读锁

rwl.writeLock().unlock();// Unlock write, still hold read

            }

        }

try{

            use(data);

}finally{

// 释放读锁

            rwl.readLock().unlock();

        }

    }

}

ReentrantReadWriteLock 分为读锁和写锁两个实例,读锁是共享锁,可被多个线程同时使用,写锁是独占锁。持有写锁的线程可以继续获取读锁,反之不行。

ReentrantReadWriteLock 总览

这一节比较重要,我们要先看清楚 ReentrantReadWriteLock 的大框架,然后再到源码细节。

首先,我们来看下 ReentrantReadWriteLock 的结构,它有好些嵌套类:

webp

大家先仔细看看这张图中的信息。然后我们把 ReadLock 和 WriteLock 的代码提出来一起看,清晰一些:

webp

很清楚了,ReadLock 和 WriteLock 中的方法都是通过 Sync 这个类来实现的。Sync 是 AQS 的子类,然后再派生了公平模式和不公平模式。

从它们调用的 Sync 方法,我们可以看到:ReadLock 使用了共享模式,WriteLock 使用了独占模式

等等,同一个 AQS 实例怎么可以同时使用共享模式和独占模式???

这里给大家回顾下 AQS,我们横向对比下 AQS 的共享模式和独占模式:

webp

AQS 的精髓在于内部的属性state

对于独占模式来说,通常就是 0 代表可获取锁,1 代表锁被别人获取了,重入例外

而共享模式下,每个线程都可以对 state 进行加减操作

也就是说,独占模式和共享模式对于 state 的操作完全不一样,那读写锁 ReentrantReadWriteLock 中是怎么使用 state 的呢?答案是将 state 这个 32 位的 int 值分为高 16 位和低 16位,分别用于共享模式和独占模式



作者:慕容千语
链接:https://www.jianshu.com/p/27ac83f340c4


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消