国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 竹山县| 双桥区| 澄迈县| 乐东| 郯城县| 平原县| SHOW| 太湖县| 城固县| 策勒县| 汉阴县| 泾阳县| 商南县| 靖西县| 鞍山市| 康保县| 得荣县| 栾城县| 图木舒克市| 巴中市| 渝北区| 民权县| 周至县| 呼和浩特市| 广汉市| 澄城县| 长岛县| 泸西县| 肇庆市| 多伦县| 乐都县| 平凉市| 苍梧县| 崇明县| 吉隆县| 宝山区| 彰武县| 遂昌县| 井陉县| 华蓥市| 宿迁市|