日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

并发工具类(三)控制并发线程数的Semaphore

發布時間:2025/4/5 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并发工具类(三)控制并发线程数的Semaphore 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://ifeve.com/concurrency-semaphore/

簡介

Semaphore(信號量)是用來控制同時訪問特定資源的線程數量,它通過協調各個線程,以保證合理的使用公共資源。很多年以來,我都覺得從字面上很難理解Semaphore所表達的含義,只能把它比作是控制流量的紅綠燈,比如XX馬路要限制流量,只允許同時有一百輛車在這條路上行使,其他的都必須在路口等待,所以前一百輛車會看到綠燈,可以開進這條馬路,后面的車會看到紅燈,不能駛入XX馬路,但是如果前一百輛中有五輛車已經離開了XX馬路,那么后面就允許有5輛車駛入馬路,這個例子里說的車就是線程,駛入馬路就表示線程在執行,離開馬路就表示線程執行完成,看見紅燈就表示線程被阻塞,不能執行。

應用場景

Semaphore可以用于做流量控制,特別公用資源有限的應用場景,比如數據庫連接。假如有一個需求,要讀取幾萬個文件的數據,因為都是IO密集型任務,我們可以啟動幾十個線程并發的讀取,但是如果讀到內存后,還需要存儲到數據庫中,而數據庫的連接數只有10個,這時我們必須控制只有十個線程同時獲取數據庫連接保存數據,否則會報錯無法獲取數據庫連接。這個時候,我們就可以使用Semaphore來做流控,代碼如下:

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore;public class SemaphoreTest {private static final int THREAD_COUNT = 30;private static ExecutorService threadPool = Executors.newFixedThreadPool(THREAD_COUNT);private static Semaphore s = new Semaphore(10);public static void main(String[] args) {for (int i = 0; i < THREAD_COUNT; i++) {threadPool.execute(new Runnable() {@Overridepublic void run() {try {s.acquire();System.out.println(Thread.currentThread().getName());Thread.sleep(5000);System.out.println("--------------");s.release();} catch (InterruptedException e) {}}});}threadPool.shutdown();} }

?

在代碼中,雖然有30個線程在執行,但是只允許10個并發的執行。Semaphore的構造方法Semaphore(int permits) 接受一個整型的數字,表示可用的許可證數量。Semaphore(10)表示允許10個線程獲取許可證,也就是最大并發數是10。Semaphore的用法也很簡單,首先線程使用Semaphore的acquire()獲取一個許可證,使用完之后調用release()歸還許可證。還可以用tryAcquire()方法嘗試獲取許可證。

其他方法

Semaphore還提供一些其他方法:

    • int availablePermits() :返回此信號量中當前可用的許可證數。
    • int getQueueLength():返回正在等待獲取許可證的線程數。
    • boolean hasQueuedThreads() :是否有線程正在等待獲取許可證。
    • void reducePermits(int reduction) :減少reduction個許可證。是個protected方法。
    • Collection getQueuedThreads() :返回所有等待獲取許可證的線程集合。是個protected方法

轉載于:https://www.cnblogs.com/davidwang456/articles/10083767.html

總結

以上是生活随笔為你收集整理的并发工具类(三)控制并发线程数的Semaphore的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜黄色av| 性色在线 | 国产三级久久久久 | 久久久视频6r | 葵司一区二区 | 成人精品视频 | 一级黄片毛片 | 一级特黄特色的免费大片视频 | 午夜免费福利视频 | 久草免费在线观看 | 日本欧美国产一区二区三区 | 午夜亚洲福利在线老司机 | 羞羞的视频网站 | www视频在线 | 日韩在线播放一区 | 在线观看中文字幕一区 | 露脸啪啪清纯大学生美女 | 黄视频免费在线观看 | 日本黄页网址 | 成年人看的网站 | 一区二区伦理 | 欧美在线一卡 | 欧美播放 | 日本视频一区二区三区 | 九一亚色 | 最新中文字幕av专区 | 久久av秘一区二区三区 | 97视频在线观看免费高清完整版在线观看 | 欧美亚洲日本一区 | jizz网站| 久久精视频| 男女爽爽 | 日韩三级电影网址 | 又黄又爽又刺激的视频 | 国产另类在线 | 四季av中文字幕一区 | 97精品熟女少妇一区二区三区 | 激情婷| 亚洲人精品午夜射精日韩 | 日韩欧美第一区 | 欧美日韩一级在线观看 | 国产自精品 | 少妇高潮惨叫久久久久久 | 青青草手机在线观看 | 亚洲第一精品在线 | 久久久久99精品成人片试看 | 久久y | 伊人久久国产 | 狠狠插狠狠操 | av一级免费 | 人人看超碰 | 99久久国产热无码精品免费 | 午夜污| 成人永久视频 | 日本成人在线免费观看 | 实拍女处破www免费看 | 国产原创视频 | 中文字幕一区二区在线观看 | 性活交片大全免费看 | 三级视频久久 | 久久99精品久久久久婷婷 | 青青草偷拍视频 | 国产一区二区三区毛片 | 综合色综合 | wwwjizzzcom| 少妇高潮惨叫久久久久 | 无码精品人妻一区二区三区湄公河 | 成人午夜视频精品一区 | 欧洲成人综合网 | 久久久久亚洲av成人网人人软件 | 黄色av导航 | 日韩精品一区在线播放 | 黄色777 | 色av性av丰满av| 美腿丝袜亚洲色图 | 国产爆乳无码一区二区麻豆 | 日批视频免费播放 | 黑人巨大精品欧美一区二区 | 免费一二三区 | 毛片123| 69精品久久久久久久 | 久久亚洲日本 | av成人天堂 | 日韩免费视频一区 | h在线播放| 高h放荡受浪受bl | 极品美女销魂一区二区三区 | 图书馆的女友动漫在线观看 | 孕期1ⅴ1高h | 一区二区三区中文字幕在线观看 | 欧美极品少妇无套实战 | 综合在线观看 | 极品粉嫩国产18尤物 | 久久亚洲AV无码精品 | 黄色一级视频免费 | 在线观看国产亚洲 | 亚洲av最新在线网址 | 成熟丰满熟妇高潮xxxxx视频 | 亚洲精品电影在线 |