国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java 并發(fā)工具類-Semaphore

2019-11-06 06:43:41
字體:
供稿:網(wǎng)友
Semaphore可以用于做流量控制,特別是公用資源有限的應(yīng)用場景,比如數(shù)據(jù)庫連接。假

如有一個需求,要讀取幾萬個文件的數(shù)據(jù),因為都是IO密集型任務(wù),我們可以啟動幾十個線程并發(fā)地讀取,但是如果讀到內(nèi)存后,還需要存儲到數(shù)據(jù)庫中,而數(shù)據(jù)庫的連接數(shù)只有10個,這時我們必須控制只有10個線程同時獲取數(shù)據(jù)庫連接保存數(shù)據(jù),否則會報錯無法獲取數(shù)據(jù)庫連接。這個時候,就可以使用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("save data");s.release(); //歸還許可證} catch (InterruptedException e) {}}});}threadPool.shutdown();}}

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 甘肃省| 疏勒县| 怀化市| 观塘区| 尖扎县| 马尔康县| 肇东市| 沁源县| 玛纳斯县| 北辰区| 昆明市| 墨竹工卡县| 元朗区| 商城县| 普定县| 南川市| 长葛市| 文登市| 剑河县| 梅州市| 凤庆县| 栖霞市| 塔城市| 鹤岗市| 桂林市| 象山县| 手游| 通河县| 聂拉木县| 北宁市| 偃师市| 楚雄市| 自贡市| 曲靖市| 安化县| 行唐县| 崇州市| 荥经县| 霍林郭勒市| 寿光市| 盱眙县|