您的位置:首頁(yè) > 軟件教程 > 教程 > 自定義同步器的實(shí)現(xiàn)與Semaphore示例

自定義同步器的實(shí)現(xiàn)與Semaphore示例

來(lái)源:好特整理 | 時(shí)間:2024-04-11 08:49:00 | 閱讀:160 |  標(biāo)簽: 一個(gè) S 面試 美團(tuán)   | 分享到:

寫(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è)坑給填上哈。

常用的AQS架構(gòu)同步器類(lèi)

自定義同步器實(shí)現(xiàn)步驟

在上一篇文章中我們就已經(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)有哪些吧

Semaphore(信號(hào)量)

在前面我們講過(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)程安全。

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(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)