精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

一级aaaa毛片| 亚洲精品久久久中文字幕| 精品国产亚洲AV| 亚洲成人一区| 91成人免费在线| 日韩不卡av| 又骚又黄的视频| 成人羞羞网站入口| 欧美综合色免费| 一本一生久久a久久精品综合蜜 | 热re99久久精品国99热蜜月| 久久久精品国产sm调教| 久久动漫网址| 疯狂做受xxxx欧美肥白少妇| 欧美高清性xxxxhd | 91.成人天堂一区| 操bbb操bbb| 一二三四区视频| 国内成人在线| 亚洲欧美国产另类| 日本xxxx黄色| 日本在线视频网| 国产精品一区二区三区乱码| 欧美高清一级大片| 亚洲av片不卡无码久久| 户外露出一区二区三区| 中文字幕一区二区三区不卡| 91精品国产综合久久香蕉922| 91麻豆制片厂| 国产美女视频一区二区| 午夜av一区二区三区| 日韩精品久久久| 成人黄色免费视频| 亚洲国产精品第一区二区| 亚洲区在线播放| 精品99在线视频| 黄色视屏免费在线观看| 91视频xxxx| 成人精品一区二区三区| 综合网在线观看| 欧美日韩一区二区三区四区在线观看| 亚洲欧美在线一区| 欧洲在线免费视频| 欧美三区四区| 夜夜嗨av一区二区三区四季av | 中文字幕亚洲乱码熟女1区2区| 99久久99久久精品国产片果冰| 欧美日本精品一区二区三区| 少妇高潮大叫好爽喷水| 国产原创av在线| 国产98色在线|日韩| 国内伊人久久久久久网站视频 | 日本不卡视频一区二区| 韩国v欧美v日本v亚洲v| 国产不卡在线观看| 三级影片在线看| 日韩精品诱惑一区?区三区| 欧美一区二区三区四区在线观看| 黑人粗进入欧美aaaaa| 国产黄大片在线观看| 成人av资源在线观看| 成人免费福利在线| 中文字幕日韩三级| 久久久国产精品一区二区中文| 欧美二区在线播放| 欧美激情久久久久久久| 免费看av成人| 亚洲精品国产精品乱码不99按摩 | 日本在线视频www鲁啊鲁| 欧美国产成人精品| 日本不卡在线观看| 国产中文在线观看| 久久日韩粉嫩一区二区三区| 久久精品日韩| 亚洲国产精品久久久久久6q| 国产麻豆9l精品三级站| 亚洲伊人一本大道中文字幕| 国产精品久久久久毛片| 精品一区二区综合| 国产精品永久免费观看| 这里只有久久精品视频| 国产亚洲一级| 美女国内精品自产拍在线播放| 国产不卡在线观看视频| 精品国产一区二区三区噜噜噜 | 2019中文字幕在线| 欧美三级一区二区三区| 亚洲狼人精品一区二区三区| 欧美激情国产日韩精品一区18| 欧美另类视频在线观看| 欧美久久一区| 国内精品美女av在线播放| 国产成人无码精品亚洲| 石原莉奈一区二区三区在线观看| 国产精品国产三级国产专播精品人 | 欧美视频免费| 精品国产美女在线| 国产十六处破外女视频| 国产精品红桃| 日韩免费高清在线观看| 在线免费观看av网址| 免费成人性网站| 亚洲永久免费观看| 色噜噜在线播放| 久久久噜噜噜久久人人看| 日韩性感在线| mm1313亚洲国产精品美女| 亚洲国产精品一区二区尤物区| 欧美一级特黄aaaaaa在线看片| 影音先锋中文在线视频| 精品国产乱码久久久久久虫虫漫画| 国产成人无码精品久久久性色| 成人国产电影在线观看| 欧美三级蜜桃2在线观看| 91丨porny丨九色| 色婷婷av一区二区三区丝袜美腿| 国产亚洲一级高清| 欧美日韩精品亚洲精品| 亚洲在线电影| 国产成人精品免费久久久久| a天堂在线视频| 99视频在线精品| 一本久道久久综合狠狠爱亚洲精品| 97影院秋霞午夜在线观看| 午夜精品久久久久影视| www.cao超碰| 欧美日韩看看2015永久免费| 日韩综合视频在线观看| 日韩久久久久久久久| 国产精品试看| 91九色视频在线| 免费在线观看一级毛片| 亚洲三级理论片| 成人免费观看视频在线观看| 国产精品成人**免费视频| 日韩av在线天堂网| a级黄色免费视频| 一区二区三区成人精品| 国产精品老牛影院在线观看| 高h调教冰块play男男双性文| 欧美激情一区二区| 大陆极品少妇内射aaaaa| 久久久国产精品入口麻豆| 亚洲日韩中文字幕| 欧美成人精品欧美一级乱黄| 久久99热国产| 日韩一区二区三区高清| 新版的欧美在线视频| 欧美一卡二卡三卡| 少妇视频在线播放| 性感少妇一区| 国内视频一区| 欧美videos另类精品| 69久久夜色精品国产69蝌蚪网| 50一60岁老妇女毛片| 欧美女王vk| 欧美中文字幕在线播放| 欧美一区二区在线观看视频| 亚洲精品乱码久久久久久久久| 亚洲综合色在线观看| 国产剧情在线观看一区| 欧美二区在线播放| 亚洲av无码乱码在线观看性色| 亚洲人成网站在线| 欧美日韩精品区别| 91日韩在线| 成人欧美一区二区三区在线湿哒哒| 韩国中文字幕2020精品| 日本韩国视频一区二区| 黄色短视频在线观看| 国产精品嫩草99av在线| 久久精品二区| 丝袜老师在线| 亚洲欧美精品一区| 无码视频一区二区三区| 亚洲国产精品成人综合色在线婷婷| 91av俱乐部| 日本在线电影一区二区三区| 国产欧美一区二区三区在线| 69av亚洲| 日韩午夜三级在线| 91porny在线| 国产精品伦理一区二区| 色婷婷狠狠18禁久久| 国产欧美日韩一级| 亚洲第一在线综合在线| 亚洲高清在线一区| 欧美最猛性xxxxx亚洲精品| 国产女人在线视频| 日韩一区二区中文字幕| 久久精品无码av| 一区二区三区日韩在线观看| 黄色正能量网站| 国产专区综合网| 成人在线免费观看av| 99精品美女| 国产一区二区高清不卡 | 影音先锋亚洲精品| 色综合电影网| 国产欧美自拍一区| 国产精品视频资源| 精品捆绑调教一区二区三区| 综合久久五月天| 秋霞网一区二区| 欧美精品自拍偷拍| 欧美超碰在线观看| 亚洲一区二区影院| 国产免费嫩草影院| 91一区二区在线观看| 日本高清一区二区视频| 久久精品主播| 男女啪啪免费视频网站| 久久久久av| 日韩久久在线| 性欧美lx╳lx╳| 99国精产品一二二线| 91久久久久久白丝白浆欲热蜜臀| 午夜精品久久久久久久99黑人| 国产原创在线观看| 国产亚洲精品综合一区91| 日本高清视频在线| 日韩三级在线观看| 一级黄色片免费看| 在线观看国产91| 中文字幕激情小说| 亚洲成人av一区| 欧美又粗又大又长| 亚洲欧美日韩在线不卡| 娇妻被老王脔到高潮失禁视频| 不卡一区二区三区四区| 自拍视频第一页| 国产一区在线视频| 久久人人爽av| 久久精品国内一区二区三区| 色诱视频在线观看| 久久动漫亚洲| 欧美一级片中文字幕| 亚洲欧美日韩精品一区二区| 青青青国产在线观看| 激情亚洲网站| 精品成在人线av无码免费看| 欧美精品啪啪| 青青在线免费视频| 欧美91视频| 9色视频在线观看| 亚洲精品在线观看91| 中文字幕制服丝袜在线| 久久在线视频| 中国成人在线视频| 欧美va天堂在线| 中文字幕日韩精品无码内射| 亚洲精品中文字幕乱码| www.69av| 136国产福利精品导航网址| 美脚丝袜脚交一区二区| 99国产精品久久久久久久| 久久综合色视频| 欧美亚洲自偷自偷| 免费观看成人网| 久久超碰97人人做人人爱| 亚洲美女性囗交| 国产精品白丝jk白祙喷水网站| 少妇丰满尤物大尺度写真| 成人a区在线观看| 亚洲一区二区观看| 国产精品丝袜91| 性欧美videos| 亚洲va在线va天堂| 精品免费囯产一区二区三区| 欧美在线一区二区| 国产绳艺sm调教室论坛| 精品少妇一区二区三区免费观看| 网站黄在线观看| 日韩电影在线观看永久视频免费网站| 色婷婷中文字幕| 中文字幕av一区| 丝袜综合欧美| 青草青草久热精品视频在线网站| 国产福利亚洲| 99在线影院| 国产在视频线精品视频www666| 中文字幕av导航| 亚洲三级色网| 日韩精品视频一二三| 成人美女在线观看| 亚洲天堂最新地址| 亚洲自拍偷拍图区| 69av视频在线观看| 日韩片之四级片| 国产视频在线看| 久久99精品久久久久久琪琪| 成人亚洲欧美| 3d蒂法精品啪啪一区二区免费| 亚洲免费毛片| 99热一区二区三区| 在线亚洲观看| 日本人dh亚洲人ⅹxx| 国产午夜精品久久| 妺妺窝人体色www婷婷| 欧美在线视频全部完| 蜜桃91麻豆精品一二三区| 中文字幕欧美精品日韩中文字幕| 超碰在线最新网址| 91精品国产综合久久久久久久久| 小说区图片区色综合区| 国产乱淫av片杨贵妃| 蜜臀av一区二区在线观看| 玖玖爱在线精品视频| 亚洲欧美日韩在线| 欧美高清69hd| 日韩大陆毛片av| 欧美寡妇性猛交xxx免费| 国产精品福利无圣光在线一区| 国产成人夜色高潮福利影视| 在线视频91| 日韩国产一区二| 一起草在线视频| 亚洲妇熟xx妇色黄| 国产女人18毛片18精品| 在线色欧美三级视频| 忘忧草在线影院两性视频| 亚洲尤物视频网| 91综合在线| www.日本xxxx| 久久久影视传媒| 美女毛片在线观看| 日韩一区二区电影网| 激情视频在线观看| 国产精品视频中文字幕91| 成人精品影视| 亚洲精品怡红院| 国产肉丝袜一区二区| 区一区二在线观看| 亚洲美女自拍视频| 亚洲一级少妇| 久久久久久久久久久久久久久久av| 一区精品久久| 99久久久无码国产精品性波多| 亚洲欧美激情小说另类| 国产又黄又大又粗的视频| 色婷婷久久av| 日韩亚洲国产免费| 亚洲午夜精品国产| 久久精品国产亚洲aⅴ| 三级影片在线观看| 欧美丰满嫩嫩电影| 免费观看成人高潮| 99久久无色码| 国产一区日韩一区| 国产麻豆剧传媒精品国产av| 亚洲国产成人高清精品| 深夜福利视频网站| 91成人免费观看网站| 久久91精品| 中文字幕天天干| 国产精品国产馆在线真实露脸| 一级片视频播放| 久久中文字幕一区| 伊人精品综合| 人人妻人人添人人爽欧美一区| 91一区在线观看| 日韩欧美一级大片| 久久久精品一区| 国产精品玖玖玖在线资源| 国产91在线免费| 国产视频一区不卡| 国产精品久久久久久69| 久久久久久com| 外国成人在线视频| 天天操狠狠操夜夜操| 一区二区三区四区在线| 天天操天天干天天爽| 国产精品久久激情| 亚洲蜜桃视频| 亚洲精品中文字幕在线播放| 在线观看日韩电影| 最新日本在线观看| 欧美激情一区二区三区在线视频| 日本sm残虐另类| 妺妺窝人体色www聚色窝仙踪| 精品亚洲精品福利线在观看| 国产美女久久| 欧美一级片免费播放| 国产欧美视频在线观看| www.97超碰| 国产精品国产福利国产秒拍| 午夜国产精品视频| av黄色在线免费观看| 日韩视频免费观看高清完整版| www.成人影院| 久久香蕉视频网站| 久久精品亚洲精品国产欧美| 国产绳艺sm调教室论坛| 国产suv精品一区二区| 欧美 日韩 国产精品免费观看| 能免费看av的网站| 日韩你懂的在线观看| 91av一区| 青青草国产精品视频| 自拍视频在线观看一区二区|