Java中的Semaphore信號量使用方法代碼實例
Semaphore簡介
Semaphore是一種基于計數(shù)的信號量。它可以設(shè)定一個閾值,基于此,多個線程競爭獲取許可信號,做自己的申請后歸還,超過閾值后,線程申請許可信號將會被阻塞。
Semaphore可以用來構(gòu)建一些對象池,資源池之類的,比如數(shù)據(jù)庫連接池,我們也可以創(chuàng)建計數(shù)為1的Semaphore,將其作為一種類似互斥鎖的機制,這也叫二元信號量,表示兩種互斥狀態(tài)。
它的用法如下:
availablePermits函數(shù)用來獲取當前可用的資源數(shù)量
wc.acquire(); //申請資源 wc.release();// 釋放資源 public Semaphore(int permits,boolean fair)
permits:初始化可用的許可數(shù)目。
fair: 若該信號量保證在征用時按FIFO的順序授予許可,則為true,否則為false;
例子
餐廳2個座位,但是有3個人要等位就餐
public class SemaphoreThread extends Thread { private String name; private Semaphore semaphore; public SemaphoreThread(String name, Semaphore semaphore) { this.name = name; this.semaphore = semaphore; } @Override public void run() { if (semaphore.availablePermits() <= 0) { System.out.println(name + "等位中。。。"); } try { semaphore.acquire(); System.out.println(name + "開始就餐了。。"); Thread.sleep(new Random().nextInt(1000)); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(name + "吃完了。。"); semaphore.release(); } }
請求
@RequestMapping("test-semaphore") public void testSemaphore() { Semaphore semaphore = new Semaphore(2); for (int i = 1; i <= 3; i++) { new SemaphoreThread("第" + i + "個人", semaphore).start(); } }
結(jié)果
第1個人開始就餐了。。
第2個人開始就餐了。。
第3個人等位中。。。
第1個人吃完了。。
第3個人開始就餐了。。
第2個人吃完了。。
第3個人吃完了。。
到此這篇關(guān)于Java中的Semaphore信號量使用方法代碼實例的文章就介紹到這了,更多相關(guān)Semaphore信號量使用方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Maven根據(jù)不同環(huán)境打包不同配置文件的方法
這篇文章主要介紹了Maven根據(jù)不同環(huán)境打包不同配置文件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08SpringBoot中JPA實現(xiàn)Sort排序的三種方式小結(jié)
這篇文章主要介紹了SpringBoot中JPA實現(xiàn)Sort排序的三種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11SpringAOP實現(xiàn)自定義接口權(quán)限控制
本文主要介紹了SpringAOP實現(xiàn)自定義接口權(quán)限控制,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11使用純Java實現(xiàn)一個WebSSH項目的示例代碼
這篇文章主要介紹了使用純Java實現(xiàn)一個WebSSH項目,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Tomcat數(shù)據(jù)源配置方法_JBuilder中
今天幫一同事配置一個數(shù)據(jù)源,采用tomcat5.5.9,本來是個很簡單的事,以前也配過,但由于很長時間沒用過容器提供的數(shù)據(jù)源了(IOC用慣了),也只記的個大概了,所以剛開始一配就出錯了,google了一下,有很多資料,照著試試卻都不好使(到不是別人說的不對,只是大家用的版本不同)。2008-10-10spring基礎(chǔ)系列之JavaConfig配置詳解
本篇文章主要介紹了spring基礎(chǔ)系列之JavaConfig配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07