這篇“java如何使用Semaphore實(shí)現(xiàn)限流器”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“java如何使用Semaphore實(shí)現(xiàn)限流器”文章吧。
目前成都創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、揚(yáng)中網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
概念
1、Semaphore可以看作是已經(jīng)被廣泛地翻譯成信號(hào)量,從概念上講,信號(hào)量保持了一組憑證,獲得憑證的線程可以訪問資源,使用完成后釋放,我們可以使用信號(hào)量來限制訪問特定資源的并發(fā)線程。
2、可以簡單概括為:一個(gè)計(jì)數(shù)器,一個(gè)等待隊(duì)列,三種方法。在信號(hào)量模型中,計(jì)數(shù)器和等待隊(duì)列是透明的,只能通過信號(hào)量模型提供的三種方式訪問,即互聯(lián)網(wǎng)、acquire和release。
實(shí)例
public class SemaphoreDemo { static class Link { } static class ObjPool{ final List pool; final Semaphore semaphore; ObjPool(int size, T t) { pool = new Vector<>(size); for (int i = 0; i < size; i++) { pool.add(t); } semaphore = new Semaphore(size); } public R exec(Function func) throws Exception { T t = null; semaphore.acquire(); try { System.out.println(Thread.currentThread().getName() + "---------爭奪鎖--------"); t = pool.remove(0); System.out.println(Thread.currentThread().getName() + " 拿到鎖執(zhí)行"); return func.apply(t); } finally { pool.add(t); semaphore.release(); } } } public static void main(String[] args) { ObjPool objPool = new ObjPool(5, new Link()); for (int i = 0; i < 30; i++) { new Thread(() -> { try { objPool.exec(t -> t.toString()); } catch (Exception e) { } }).start(); } } }
以上就是關(guān)于“java如何使用Semaphore實(shí)現(xiàn)限流器”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。