寫(xiě)在開(kāi)頭 今天在?蜕峡吹搅艘粋(gè)帖子,一個(gè)網(wǎng)友吐槽美團(tuán)一面上來(lái)就讓手撕同步器,沒(méi)整出來(lái),結(jié)果面試直接涼涼。 就此聯(lián)想到一周前寫(xiě)的一篇關(guān)于AQS知識(shí)點(diǎn)解析的博文,當(dāng)時(shí)也曾埋下伏筆說(shuō)后面會(huì)根據(jù)AQS的原理實(shí)現(xiàn)一個(gè)自定義的同步器,那今天就來(lái)把這個(gè)坑給填上哈。 常用的AQS架構(gòu)同步器類(lèi) 自定義同步器實(shí)現(xiàn)步驟
今天在?蜕峡吹搅艘粋(gè)帖子,一個(gè)網(wǎng)友吐槽美團(tuán)一面上來(lái)就讓手撕同步器,沒(méi)整出來(lái),結(jié)果面試直接涼涼。
就此聯(lián)想到一周前寫(xiě)的一篇關(guān)于AQS知識(shí)點(diǎn)解析的博文,當(dāng)時(shí)也曾埋下伏筆說(shuō)后面會(huì)根據(jù)AQS的原理實(shí)現(xiàn)一個(gè)自定義的同步器,那今天就來(lái)把這個(gè)坑給填上哈。
在上一篇文章中我們就已經(jīng)提過(guò)了AQS是基于
模版方法模式
的,我們基于此的自定義同步器設(shè)計(jì)一般需要如下兩步:
1. 使用者繼承 AbstractQueuedSynchronizer 并重寫(xiě)指定的方法;
2. 將 AQS 組合在自定義同步組件的實(shí)現(xiàn)中,并調(diào)用其模板方法,而這些模板方法會(huì)調(diào)用使用者重寫(xiě)的方法。
在模板方法模式下,有個(gè)很重要的東西,那就是
“鉤子方法”
,這是一種抽象類(lèi)中的方法,一般使用 protected 關(guān)鍵字修飾,可以給與默認(rèn)實(shí)現(xiàn),空方法居多,其內(nèi)容邏輯由子類(lèi)實(shí)現(xiàn),為什么不使用抽象方法呢?因?yàn),抽象方法需要子?lèi)全部實(shí)現(xiàn),增加大量代碼冗余!
Ok,有了這層理論知識(shí),我們?nèi)タ纯碕ava中根據(jù)AQS實(shí)現(xiàn)的同步工具類(lèi)有哪些吧
在前面我們講過(guò)的synchronized 和 ReentrantLock 都是一次只允許一個(gè)線(xiàn)程訪(fǎng)問(wèn)某個(gè)資源,而Semaphore(信號(hào)量)可以用來(lái)控制同時(shí)訪(fǎng)問(wèn)特定資源的線(xiàn)程數(shù)量,它并不能保證線(xiàn)程安全。
小編推薦閱讀如何使用 Pytorch 中的 DataSet 和 DataLoader
閱讀golang slice相關(guān)常見(jiàn)的性能優(yōu)化手段
閱讀連接Elasticsearch服務(wù)器的Python代碼示例
閱讀國(guó)產(chǎn)操作系統(tǒng)上實(shí)現(xiàn)RTMP推流攝像頭視頻和麥克風(fēng)聲音到流媒體服務(wù)器
閱讀使用Python讀取和導(dǎo)出NetCDF格式的多時(shí)相柵格文件
閱讀多租戶(hù)系統(tǒng)數(shù)據(jù)權(quán)限設(shè)計(jì)與RuoYi系統(tǒng)的借鑒
閱讀count(*)、count(1)哪個(gè)更快?面試必問(wèn):通宵整理的十道經(jīng)典MySQL必問(wèn)面試題
閱讀從需求分析、產(chǎn)品設(shè)計(jì)到部署交付各階段說(shuō)明
閱讀如何利用七牛云進(jìn)行數(shù)據(jù)備份和刪除
閱讀強(qiáng)化學(xué)習(xí)筆記之【ACE:Off-PolicyActor-CriticwithCausality-AwareEntropyRegularization】
閱讀使用MailKit在.NET Core中收發(fā)郵件的完整示例
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2024 haote.com 好特網(wǎng)