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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java并发编程之Semaphore

發(fā)布時(shí)間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java并发编程之Semaphore 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.Semaphore主要方法

Semaphore(int permits):構(gòu)造方法,創(chuàng)建具有給定許可數(shù)的計(jì)數(shù)信號量并設(shè)置為非公平信號量。

Semaphore(int permits,boolean fair):構(gòu)造方法,當(dāng)fair等于true時(shí),創(chuàng)建具有給定許可數(shù)的計(jì)數(shù)信號量并設(shè)置為公平信號量。

void acquire():從此信號量獲取一個(gè)許可前線程將一直阻塞。相當(dāng)于一輛車占了一個(gè)車位。

void acquire(int n):從此信號量獲取給定數(shù)目許可,在提供這些許可前一直將線程阻塞。比如n=2,就相當(dāng)于一輛車占了兩個(gè)車位。

void release():釋放一個(gè)許可,將其返回給信號量。就如同車開走返回一個(gè)車位。

void release(int n):釋放n個(gè)許可。

int availablePermits():當(dāng)前可用的許可數(shù)。

2.示例

Semaphore(信號量)是用來控制同時(shí)訪問特定資源的線程數(shù)量,它通過協(xié)調(diào)各個(gè)線程,以保證合理的使用公共資源。

比如一個(gè)火車站,只有3個(gè)售票點(diǎn),所以要控制流量。假設(shè)有10個(gè)人要買票,現(xiàn)在只允許3個(gè)人同時(shí)去對應(yīng)的售票點(diǎn)買票,只有這3個(gè)人中有人完成了購票操作,后面的人才能允許進(jìn)入。

public class SemaphoreDemo extends Thread {private Semaphore semaphore;private String name; ?public SemaphoreDemo(Semaphore semaphore, String name) {this.semaphore = semaphore;this.name = name;} ?@Overridepublic void run() {//返回此信號量中當(dāng)前可用的許可證數(shù)int i = semaphore.availablePermits();if (i > 0) {System.out.println(name + ":我有搶票的資格了");} else {System.out.println(name + ":好可惜啊");} ?try {//獲得許可證semaphore.acquire();System.out.println(name + ":我要開搶了");//模擬搶票時(shí)間Thread.sleep(new Random().nextInt(1000));System.out.println(name + ":終于搶到票了");} catch (InterruptedException e) {e.printStackTrace();} finally {//釋放許可證semaphore.release();}} ?public static void main(String[] args) {Semaphore s = new Semaphore(3);for (int i = 1; i <= 10; i++) {SemaphoreDemo semaphore = new SemaphoreDemo(s, i + "");semaphore.start();}} } 在代碼中,雖然有10個(gè)線程在執(zhí)行,但是只允許3個(gè)并發(fā)的執(zhí)行。

執(zhí)行流程:

1:我有搶票的資格了 1:我要開搶了 2:我有搶票的資格了 2:我要開搶了 3:我有搶票的資格了 3:我要開搶了 4:好可惜啊 5:好可惜啊 6:好可惜啊 7:好可惜啊 8:好可惜啊 9:好可惜啊 10:好可惜啊 2:終于搶到票了 4:我要開搶了 3:終于搶到票了 5:我要開搶了 5:終于搶到票了 6:我要開搶了 1:終于搶到票了 7:我要開搶了 4:終于搶到票了 8:我要開搶了 8:終于搶到票了 9:我要開搶了 7:終于搶到票了 10:我要開搶了 10:終于搶到票了 9:終于搶到票了 6:終于搶到票了

總結(jié)

以上是生活随笔為你收集整理的java并发编程之Semaphore的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。