精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Semaphore自白:限流器用我就對了!

開發(fā) 后端
Java 中的一個同步器,與 CountDownLatch 和 CyclicBarrier 不同,Semaphore 是用來管理許可證的,線程在調用 acquire() 方法時,如果沒有許可證,那么線程就會阻塞等待,直到有許可證時才能繼續(xù)執(zhí)行。

[[394557]]

大家好,我是 Semaphore,我的中文名字叫“信號量”,我來自 JUC 家族(java.util.concurrent)。

我們家族有很多優(yōu)秀的成員,比如:CountDownLatch:等待其他線程都執(zhí)行完再執(zhí)行某線程,CyclicBarrier:循環(huán)阻塞一組線程,直到某個事件達成,當然我也不比他們弱哦 罒ω罒。

以下是我的個人簡歷,希望各位讀者老爺們給個好評和三連,先在此謝過了~

基本信息

  • 姓名:Semaphore
  • 中文名:(計數(shù))信號量
  • 出生日期:JDK 1.5
  • 籍貫:JUC(java.util.concurrent)
  • 用途:Java 中的一個同步器,與 CountDownLatch 和 CyclicBarrier 不同,Semaphore 是用來管理許可證的,線程在調用 acquire() 方法時,如果沒有許可證,那么線程就會阻塞等待,直到有許可證時才能繼續(xù)執(zhí)行。許可證使用 release() 方法來發(fā)布(發(fā)布一個許可證),調用 acquire() 方法時,如果有證書會減少許可證并繼續(xù)執(zhí)行后面的代碼,如果沒有證書只能阻塞等待許可證,而 Semaphore 在創(chuàng)建時會聲明許可證的最大數(shù)量。

專業(yè)技能

我的專業(yè)技能就是“管理證書”,使用此技能可以輕松的實現(xiàn)「限流」功能。

什么是限流?

比如五一小長假快到了,到那時會有大量的人去各個景區(qū)游玩,但是每個景區(qū)能容納的人是有限的,比如大西安的大唐芙蓉園,它的日承載量是 6 萬人次,也就是說每天最多能讓 6 萬來這里游玩,但五一的時候會來很多的人,比如突然來了 10 萬人,那這個時候就只能「限流」排隊等待入園了。

也就說,大唐芙蓉園會讓 6 萬人先進去玩,剩余的人在門口等待排隊,當有人從里面出來的時候,才允許另一個排隊的人進去。工作人員會把人數(shù)始終控制在 6 萬人以下,這樣做的目的是為了讓游玩的人有一個好的體驗,不至于造成一些意外事故,比如踩踏事件什么的,一定程度上保證了社會的穩(wěn)定,也便于景區(qū)良好的口碑建立和日后的正常運營,而這種排隊限制最大人數(shù)的行為就是「限流」。

再來舉個例子,比如以車輛的限號來說,它也是限流的一種常見場景。這樣做的好處,一方面是可以保護環(huán)境盡可能少一些碳排放,另一方面能有效的緩解上、下班高峰時段的擁堵情況。尤其是在大西安,很難想象如果不限號,那么會堵成什么樣?(PS:讓原本本不富裕的生活更是雪上加霜...)

咱們再從生活中的事例回到程序當中,假設一個程序只能為 10W 人提供服務,突然有一天因為某個熱點事件,造成了系統(tǒng)短時間內的訪問量迅速增加到了 50W,那么導致的直接結果是系統(tǒng)崩潰,任何人都不能用系統(tǒng)了,顯然只有少人數(shù)能用遠比所有人都不能用更符合我們的預期,因此這個時候我們要使用「限流」了。

使用Semaphore實現(xiàn)限流

Semaphore 在創(chuàng)建的時候可以設置證書的數(shù)量,相當于設置了限流的最大值,再通過 release() 方法來發(fā)放證書,通過 acquire() 方法來阻塞并等待證書,這樣就通過控制證書的方式來實現(xiàn)限流功能了。

項目經(jīng)驗

接下來,咱們使用代碼的方式來演示 Semaphore 的使用。我們以停車場的限流為例,假設整個停車場只有 2 個車位(車位雖少,但足矣說明問題),但來停車的卻有 5 輛車,顯然車位不夠用了,此時需要保證停車場最多只能有 2 輛車,接下來咱們使用 Semaphore 來實現(xiàn)車輛的限流功能,具體實現(xiàn)代碼如下:

  1. import java.util.Date
  2. import java.util.concurrent.ExecutorService; 
  3. import java.util.concurrent.Executors; 
  4. import java.util.concurrent.Semaphore; 
  5.  
  6. /** 
  7.  * Author:磊哥 
  8.  * By:Java中文社群 
  9.  */ 
  10. public class SemaphoreExample { 
  11.     // 創(chuàng)建信號量 
  12.     static Semaphore semaphore = new Semaphore(2); 
  13.  
  14.     public static void main(String[] args) { 
  15.  
  16.         // 創(chuàng)建 5 個固定的線程數(shù) 
  17.         ExecutorService threadPool = Executors.newFixedThreadPool(5); 
  18.  
  19.         // 定義執(zhí)行任務 
  20.         Runnable runnable = new Runnable() { 
  21.             @Override 
  22.             public void run() { 
  23.                 // 拿到當前線程的名稱 
  24.                 String tname = Thread.currentThread().getName(); 
  25.                 System.out.println(String.format("老司機:%s,停車場外排隊,時間:%s"
  26.                         tname, new Date())); 
  27.                 try { 
  28.                     // 執(zhí)行此行,讓所有線程先排隊等待進入停車場 
  29.                     Thread.sleep(100); 
  30.                     // 執(zhí)行阻塞 
  31.                     semaphore.acquire(); 
  32.                     System.out.println(String.format("老司機:%s,已進入停車場,時間:%s"
  33.                             tname, new Date())); 
  34.                     Thread.sleep(1000); 
  35.                     System.out.println(String.format("老司機:%s,離開停車場,時間:%s"
  36.                             tname, new Date())); 
  37.                     // 釋放鎖 
  38.                     semaphore.release(); 
  39.                 } catch (InterruptedException e) { 
  40.                     e.printStackTrace(); 
  41.                 } 
  42.             } 
  43.         }; 
  44.  
  45.         // 執(zhí)行任務 1 
  46.         threadPool.submit(runnable); 
  47.  
  48.         // 執(zhí)行任務 2 
  49.         threadPool.submit(runnable); 
  50.  
  51.         // 執(zhí)行任務 3 
  52.         threadPool.submit(runnable); 
  53.  
  54.         // 執(zhí)行任務 4 
  55.         threadPool.submit(runnable); 
  56.  
  57.         // 執(zhí)行任務 5 
  58.         threadPool.submit(runnable); 
  59.  
  60.         // 等線程池任務執(zhí)行完之后關閉 
  61.         threadPool.shutdown(); 
  62.     } 

以上代碼的執(zhí)行結果如下:

從上述的結果我們可以看出,當有 5 輛車同時需要進入停車場時,因為停車場的停車位只有 2 個,所以停車場最多只能容納 2 輛車。此時我們通過 Semaphore 的 acquire 方法(阻塞等待)和 release 方法(頒發(fā)一個證書)順利的實現(xiàn)了限流的功能,讓停車場的車輛數(shù)始終控制在 2 輛車以下(等于或小于 2 輛車)。

個人評價

我(Semaphore)實現(xiàn)證書控制手段有兩種,一種公平模式和非公平模式,當然為了執(zhí)行的性能考慮,默認情況下我采取的是非公平的方式,具體實現(xiàn)可見源碼:

  1. public Semaphore(int permits) { 
  2.     sync = new NonfairSync(permits); // 非公平模式 

關于公平模式和非公平模式

所謂的公平模式就是以調用 acquire() 的先后順序來決定獲取許可證的順序的,公平模式遵循先進先出(FIFO)原則;而非公平模式是搶占式的,也就是有可能一個新的獲取線程恰好在一個許可證釋放時得到了這個許可證,而前面還有等待的線程。

顯然使用非公平的模式性能更高,因為它會把許可證發(fā)放給剛好準備好的線程,而不用再根據(jù)先后順序去“叫號”了。

使用公平模式

當然,你可以手動選擇使用公平模式來運行 Semaphore,Semaphore 提供了兩個構造函數(shù),源碼如下:

  1. public Semaphore(int permits) { 
  2.     sync = new NonfairSync(permits); 
  3. public Semaphore(int permits, boolean fair) { 
  4.     sync = fair ? new FairSync(permits) : new NonfairSync(permits); 

如果想用公平模式就可以使用第二個構造函數(shù) Semaphore(int permits, boolean fair),將 fair 值設置為 true 就是公平模式來獲取證書了。

其他補充

我還提供了一些其他方法,用于實現(xiàn)更多的功能,詳情如下:

  • int availablePermits():返回此信號量中當前可用的許可證數(shù)。
  • int getQueueLength():返回正在等待獲取許可證的線程數(shù)。
  • boolean hasQueuedThreads():是否有線程正在等待獲取許可證。
  • boolean isFair():查詢 Semaphore 使用的是公平模式還是非公平模式,如果此信號量使用的是公平模式則返回 true。
  • void release(int permits):釋放給定數(shù)量的許可證,將其返回到信號量。
  • tryAcquire():從這個信號量獲得許可證,只有在調用時可以使用該許可證。
  • tryAcquire(int permits):從這個信號量獲取給定數(shù)量的許可證,只有在調用時全部可用。
  • tryAcquire(int permits, long timeout, TimeUnit unit):從該信號量獲取給定數(shù)量的許可證,如果在給定的等待時間內全部可用,并且當前線程尚未 interrupted。
  • tryAcquire(long timeout, TimeUnit unit):如果在給定的等待時間內可用,并且當前線程尚未 到達 interrupted,則從該信號量獲取許可。
  • void reducePermits(int reduction) :減少可用的許可證數(shù)量 reduction 個,它是 protected 方法。
  • Collection getQueuedThreads() :返回所有等待獲取許可證的線程集合,它是 protected 方法。

總結

 

Semaphore 信號量是用來管理一組證書的,默認情況下它采取的是非公平的方式來管理證書,這樣做的目的是為了實現(xiàn)高性能。Semaphore 中包含了兩個重要的方法:release() 方法發(fā)布一個許可證書;acquire() 方法阻塞并等待一個證書。當線程調用了 acquire() 方法只有擁有了證書才能繼續(xù)執(zhí)行,因此可以使用 Semaphore 來實現(xiàn)限流。

 

責任編輯:武曉燕 來源: Java中文社群
相關推薦

2019-10-08 10:37:46

設計技術程序員

2024-06-20 12:30:34

2023-06-27 06:58:38

機械鍵盤軸體

2025-07-02 03:00:00

2019-03-21 12:42:18

華為云

2023-07-13 09:05:57

react hook類型types

2018-10-12 09:42:00

分布式鎖 Java多線

2020-06-08 11:28:22

場景索引設計

2019-08-13 15:36:57

限流算法令牌桶

2017-12-05 13:12:35

Android軟鍵盤參數(shù)

2017-12-05 15:26:19

2023-12-18 09:53:27

系統(tǒng)管理

2024-04-22 00:00:00

配置鏈接穩(wěn)定性

2024-06-26 11:55:44

2019-08-12 10:27:34

前端程序員網(wǎng)絡

2013-10-31 15:52:11

2021-12-29 21:31:23

Windows 11Windows微軟

2021-09-18 11:28:29

GitHub代碼開發(fā)者

2012-06-08 03:24:38

程序員

2021-10-21 06:39:41

限流熔斷系統(tǒng)
點贊
收藏

51CTO技術棧公眾號

成人高h视频在线| 亚洲天堂2020| aa视频在线播放| 亚洲区小说区图片区| 久久久噜噜噜| 不卡av在线播放| 99久久免费看精品国产一区| h1515四虎成人| 亚洲精品视频在线看| 久久er99热精品一区二区三区| 日韩综合在线观看| 中文字幕乱码亚洲无线精品一区| 亚洲精品720p| 污版视频在线观看| 操人在线观看| 国产精品午夜在线观看| 国产一区二区不卡视频在线观看| 中文在线免费看视频| 国产精品多人| 综合欧美国产视频二区| a天堂视频在线观看| 亚洲网站三级| 在线观看亚洲a| 免费看国产一级片| 欧美边添边摸边做边爱免费| 91麻豆免费看| 操人视频欧美| 国产一区二区视频免费观看| 免费a级人成a大片在线观看| 亚洲性色视频| www.亚洲天堂| 中文字幕av久久爽一区| 精品在线网站观看| 欧美一级黄色大片| 五月激情五月婷婷| 欧美粗大gay| 午夜影视日本亚洲欧洲精品| 91九色国产ts另类人妖| 岛国在线视频| 久久综合久久99| 国产日韩欧美精品| 超碰在线观看av| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品女人网站| 亚洲av无码不卡| 性欧美xxxx大乳国产app| 国模私拍一区二区三区| 黑鬼狂亚洲人videos| 成人久久综合| 中文精品99久久国产香蕉| 九色porny自拍视频| 蜜臀av一区| 亚洲国产黄色片| 精品久久久久一区二区| 在线观看视频一区二区三区| 欧美一区二区视频网站| 中文字幕在线视频一区二区三区| 国产91亚洲精品久久久| 欧美视频自拍偷拍| 污视频免费在线观看网站| 全亚洲第一av番号网站| 日本久久电影网| 一区二区在线播放视频| 欧美亚洲日本精品| 日韩欧美在线视频日韩欧美在线视频 | 中文字幕日本乱码精品影院| 在线看视频不卡| 在线视频观看国产| 亚洲综合激情另类小说区| av网站手机在线观看| 久草在线资源福利站| 欧美性xxxxx极品娇小| 日韩精品无码一区二区三区免费| 欧美色999| 欧美日韩免费不卡视频一区二区三区| www.com污| 白嫩白嫩国产精品| 精品香蕉在线观看视频一| 无码人妻aⅴ一区二区三区69岛| jlzzjlzz亚洲女人| 久久伊人免费视频| 国产精品a成v人在线播放| 亚洲永久视频| 国产欧美va欧美va香蕉在| 国产成人精品白浆久久69| 成人aa视频在线观看| 欧美在线播放一区| 麻豆传媒在线免费看| 亚洲图片欧美视频| 国产熟人av一二三区| 精品午夜视频| 国产视频在线观看一区二区| 黑人操日本美女| 天天综合网天天| 亚洲欧美日韩一区二区| 久久99九九| 国产h在线观看| 奇米在线7777在线精品| 97成人精品视频在线观看| 青青草视频成人| 欧美视频三区| 亚洲免费电影在线观看| 欧美刺激性大交免费视频| 久99久在线视频| 真实国产乱子伦对白在线| 亚洲一区成人| 在线播放国产一区中文字幕剧情欧美 | 蜜桃精品成人影片| 福利写真视频网站在线| 丁香六月综合激情| 成人免费视频网址| 毛片毛片毛片毛| 这里只有精品国产| 国偷自产视频一区二区久| 蜜臀久久久久久久| 九九在线精品视频| 欧美三区在线观看| 樱空桃在线播放| 国模冰冰炮一区二区| 91精品国产91久久久久久一区二区| 国精产品一区一区三区免费视频 | 欧美在线一区视频| 欧美日韩视频免费看| 日韩av在线高清| 国产一级二级三级| 久久成人免费网站| 欧美一区二区福利| a国产在线视频| 日韩美女视频在线| 免费成年人视频在线观看| 日韩有码一区二区三区| 久久偷看各类wc女厕嘘嘘偷窃| 图片区小说区亚洲| 欧美一区二区精品| 亚洲人做受高潮| 麻豆精品一区二区av白丝在线| 开心色怡人综合网站| tube8在线hd| 精品精品欲导航| 日日骚一区二区三区| 美国十次了思思久久精品导航| 欧洲一区二区日韩在线视频观看免费 | 韩国中文字幕hd久久精品| 亚洲手机成人高清视频| 午夜免费看毛片| 成人亚洲一区二区| 国产精品亚洲网站| aaa日本高清在线播放免费观看| 色综合色综合色综合| 97人妻天天摸天天爽天天| 亚洲精品少妇| 久久精品美女| 成人性生交大片免费观看网站| 日韩成人免费视频| 在线观看精品国产| 99精品国产99久久久久久白柏| 国产精品久久久久久久乖乖| 日韩高清二区| 欧美激情精品久久久久久蜜臀| 性做久久久久久久| 亚洲成av人片在线观看| av av在线| 一区二区日本视频| 欧美一级日本a级v片| 日韩另类视频| 日韩视频精品在线| 精品国产av鲁一鲁一区| 亚洲一区二区综合| 美国黄色一级毛片| 蜜臀av一区二区在线免费观看| 影音欧美亚洲| 亚洲精品一区二区三区在线| 高清亚洲成在人网站天堂| 天堂91在线| 欧美日韩一级片网站| 国产成人综合在线视频| 成人免费视频一区二区| 999香蕉视频| 99精品视频在线观看播放| 99re在线播放| 91av亚洲| www.亚洲人.com| 色婷婷综合视频| 在线视频国产一区| 高h视频免费观看| 91片在线免费观看| 一本色道久久亚洲综合精品蜜桃| 欧美黄色一级视频| 久久久人人爽| 成人激情久久| 欧美亚洲一级片| 免费不卡视频| 亚洲乱码av中文一区二区| 91精品国产色综合久久不8| 亚洲午夜激情网站| 手机毛片在线观看| 高清视频一区二区| 9l视频白拍9色9l视频| 亚洲黄色影院| 欧美 日韩 国产 在线观看| 国产精品对白| 91香蕉国产在线观看| 中文字幕乱码中文乱码51精品| 日韩一区二区三区xxxx| 五月婷婷丁香花| 制服丝袜在线91| 丁香社区五月天| 亚洲va天堂va国产va久| 波多野结衣喷潮| 国产亚洲精品久| 野战少妇38p| 国产在线精品一区在线观看麻豆| 国产aaa一级片| 激情一区二区| 麻豆中文字幕在线观看| 国产精品中文字幕亚洲欧美| 国产精品v欧美精品∨日韩| 精品国产黄a∨片高清在线| 9.1国产丝袜在线观看 | 色天天综合网| 日本不卡久久| 欧美国产不卡| 国产一区二区中文字幕免费看| 亚洲影视资源| 国产精品免费视频xxxx| xxx欧美xxx| 91av视频在线观看| 国产第一页在线视频| 久久影院模特热| 免费黄色在线看| 在线观看精品自拍私拍| 无码国产伦一区二区三区视频| 欧美一区二区播放| 国产精品亚洲欧美在线播放| 色播五月激情综合网| 黄色片视频网站| 午夜一区二区三区视频| 国产一卡二卡在线| 亚洲国产日韩一区二区| 久久精品一区二区三| 亚洲精品成人悠悠色影视| 最新黄色av网址| 国产精品久久久久影院亚瑟 | 午夜av中文字幕| 理论电影国产精品| 亚洲一级片免费| 日韩av在线免费观看不卡| caopor在线视频| 日本不卡一区二区三区高清视频| 99热成人精品热久久66| 久久九九国产| 国产一区二区在线免费播放| 日本aⅴ亚洲精品中文乱码| 日韩无套无码精品| 日本不卡的三区四区五区| 天天操天天摸天天爽| 免费看黄色91| 午夜免费看毛片| 国产精品一级片| 亚洲香蕉中文网| 97精品视频在线观看自产线路二| 先锋资源av在线| 国产亚洲制服色| 992在线观看| 亚洲免费高清视频在线| 日韩免费一级片| 色婷婷久久99综合精品jk白丝| 国产午夜无码视频在线观看| 欧美日韩一区小说| 国产成年妇视频| 亚洲国产精品人久久电影| 精品欧美不卡一区二区在线观看| 亚洲美女喷白浆| 欧洲日本在线| 欧美精品电影在线| 日韩福利一区| 91香蕉电影院| 九九久久成人| 国产一区一区三区| 亚洲激情专区| 亚洲欧洲日本精品| 丁香天五香天堂综合| 高清国产在线观看| 伊人开心综合网| 亚洲大尺度在线观看| 日韩一区二区在线播放| 日韩精品系列| 久久这里有精品| 伊人久久国产| 亚洲一区二区三区四区视频| 国产精品对白久久久久粗| 亚洲一区二区三区加勒比| 精品999日本| 性chinese极品按摩| 成人晚上爱看视频| 极品色av影院| 色综合天天天天做夜夜夜夜做| 国产视频手机在线| 亚洲一二三在线| 免费在线国产视频| 国产精品小说在线| 亚洲欧美tv| 91国在线高清视频| 日本在线不卡视频一二三区| 在线观看一区二区三区四区| 亚洲国产岛国毛片在线| 你懂的国产视频| 日韩视频在线一区二区| www日韩tube| 51精品国产黑色丝袜高跟鞋| 国产乱码精品一区二区三区亚洲人 | 午夜精品www| 国产日韩一区二区三免费高清| 欧美日韩一区二区视频在线| 欧美三级不卡| 免费黄频在线观看| 中文字幕乱码久久午夜不卡| 久久久久久久黄色片| 日韩美女视频在线| 国产色在线观看| 国产精品福利无圣光在线一区| 欧美影院天天5g天天爽| 黄色一级大片免费| 激情综合色综合久久综合| 欧美黄色高清视频| 色综合色狠狠天天综合色| 午夜视频在线免费播放| 欧美国产亚洲精品久久久8v| 91精品网站在线观看| 日韩电影免费观看高清完整| 久久久久久久欧美精品| 漂亮人妻被黑人久久精品| 亚洲一级片在线观看| 99在线精品视频免费观看软件 | 日韩精品一区二区三区在线视频| 在线观看成人免费视频| 免费在线观看污视频| 欧美夜福利tv在线| 日韩欧美美女在线观看| 成年人午夜视频在线观看| 不卡的看片网站| 日韩免费黄色片| 精品一区二区电影| 欧美成人免费电影| 亚洲春色在线| 久久爱另类一区二区小说| 麻豆一区在线观看| 欧美高清视频一二三区 | 亚洲成a人片在线不卡一二三区| 不卡视频免费在线观看| 欧美国产日韩二区| 大型av综合网站| 日本三级免费网站| 久久久高清一区二区三区| 成年人晚上看的视频| 中文字幕亚洲一区| 成人动漫视频在线观看| 日韩精品福利片午夜免费观看| 国产在线播放一区二区三区| 欧美三根一起进三p| 欧美成人免费网站| 成人在线黄色电影| 欧美伦理一区二区| 日本午夜一本久久久综合| 手机在线中文字幕| 日韩亚洲欧美一区| 春色校园综合激情亚洲| 日本不卡一区二区三区在线观看 | 欧美一卡二卡在线观看| 亚洲无线看天堂av| 精品国产一区二区三区四区vr| 亚洲一区二区成人| 国产传媒在线看| 日韩一区二区三| 欧美在线极品| 亚洲免费精品视频| 国产大陆精品国产| 黄色在线免费观看| 日韩在线免费视频| youjizz亚洲| 成人小视频在线看| 一区在线观看免费| 色欲av永久无码精品无码蜜桃| 国产99视频在线观看| 亚洲一区二区三区| 亚洲一二三四五| 欧美视频中文字幕| av电影院在线看| 视频一区二区三区在线观看| 国产老妇另类xxxxx| 免费看毛片网站| 欧美精品在线观看| 免费一区二区三区视频导航| 在线一区二区不卡| 欧美香蕉大胸在线视频观看| 黄色精品免费看| 欧美日韩精品综合| 懂色av一区二区夜夜嗨| 五月天中文字幕| 97欧美精品一区二区三区|