寫在開頭 今天在?蜕峡吹搅艘粋(gè)帖子,一個(gè)網(wǎng)友吐槽美團(tuán)一面上來就讓手撕同步器,沒整出來,結(jié)果面試直接涼涼。 就此聯(lián)想到一周前寫的一篇關(guān)于AQS知識(shí)點(diǎn)解析的博文,當(dāng)時(shí)也曾埋下伏筆說后面會(huì)根據(jù)AQS的原理實(shí)現(xiàn)一個(gè)自定義的同步器,那今天就來把這個(gè)坑給填上哈。 常用的AQS架構(gòu)同步器類 自定義同步器實(shí)現(xiàn)步驟
今天在?蜕峡吹搅艘粋(gè)帖子,一個(gè)網(wǎng)友吐槽美團(tuán)一面上來就讓手撕同步器,沒整出來,結(jié)果面試直接涼涼。
就此聯(lián)想到一周前寫的一篇關(guān)于AQS知識(shí)點(diǎn)解析的博文,當(dāng)時(shí)也曾埋下伏筆說后面會(huì)根據(jù)AQS的原理實(shí)現(xiàn)一個(gè)自定義的同步器,那今天就來把這個(gè)坑給填上哈。
在上一篇文章中我們就已經(jīng)提過了AQS是基于
模版方法模式
的,我們基于此的自定義同步器設(shè)計(jì)一般需要如下兩步:
1. 使用者繼承 AbstractQueuedSynchronizer 并重寫指定的方法;
2. 將 AQS 組合在自定義同步組件的實(shí)現(xiàn)中,并調(diào)用其模板方法,而這些模板方法會(huì)調(diào)用使用者重寫的方法。
在模板方法模式下,有個(gè)很重要的東西,那就是
“鉤子方法”
,這是一種抽象類中的方法,一般使用 protected 關(guān)鍵字修飾,可以給與默認(rèn)實(shí)現(xiàn),空方法居多,其內(nèi)容邏輯由子類實(shí)現(xiàn),為什么不使用抽象方法呢?因?yàn),抽象方法需要子類全部?shí)現(xiàn),增加大量代碼冗余!
Ok,有了這層理論知識(shí),我們?nèi)タ纯碕ava中根據(jù)AQS實(shí)現(xiàn)的同步工具類有哪些吧
在前面我們講過的synchronized 和 ReentrantLock 都是一次只允許一個(gè)線程訪問某個(gè)資源,而Semaphore(信號(hào)量)可以用來控制同時(shí)訪問特定資源的線程數(shù)量,它并不能保證線程安全。
小編推薦閱讀機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)