這篇文章主要講解了“java怎么使用Semaphore實現(xiàn)限流器”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java怎么使用Semaphore實現(xiàn)限流器”吧!
創(chuàng)新互聯(lián)建站專業(yè)網(wǎng)站制作、網(wǎng)站設計,集網(wǎng)站策劃、網(wǎng)站設計、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文推廣等專業(yè)人才根據(jù)搜索規(guī)律編程設計,讓網(wǎng)站在運行后,在搜索中有好的表現(xiàn),專業(yè)設計制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設為您創(chuàng)造效益。
概念
1、Semaphore可以看作是已經(jīng)被廣泛地翻譯成信號量,從概念上講,信號量保持了一組憑證,獲得憑證的線程可以訪問資源,使用完成后釋放,我們可以使用信號量來限制訪問特定資源的并發(fā)線程。
2、可以簡單概括為:一個計數(shù)器,一個等待隊列,三種方法。在信號量模型中,計數(shù)器和等待隊列是透明的,只能通過信號量模型提供的三種方式訪問,即互聯(lián)網(wǎng)、acquire和release。
實例
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(); } } }
感謝各位的閱讀,以上就是“java怎么使用Semaphore實現(xiàn)限流器”的內容了,經(jīng)過本文的學習后,相信大家對java怎么使用Semaphore實現(xiàn)限流器這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!