91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解析Semaphore信號量

發布時間:2021-12-20 10:54:53 來源:億速云 閱讀:154 作者:柒染 欄目:云計算

這篇文章給大家介紹如何解析Semaphore信號量 ,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

前幾天群里有網友問我信號量和線程池,我對信號量回答有些錯誤,后面群里其他網友做了更正,今天由于時間緊張,我就簡單的在說一下信號量和線程池。

自從 jdk5.0 開始在 java.util.concurrent 包里提供了 Semaphore 的官方實現,因此大家不需要自己去實現 Semaphore。但是還是很有必要去熟悉如何使用 Semaphore 及其背后的原理。Semaphore(信號量)是一個線程同步結構,用于在線程間傳遞信號,以避免出現信號丟失,或者像鎖一樣用于保護一個關鍵區域。

信號量和線程池的使用場景非常的廣泛,最簡單的就是 Hystirx 中提供了兩種模式執行邏輯:信號量、線程池。所以對于 JUC 這套視頻,大家還是很有必要看一看的。

Semaphore 可以控制某個資源可被同時訪問的個數,通過 acquire() 獲取一個許可,如果沒有就等待,而 release() 釋放一個許可。比如在 Windows 下可以設置共享文件的最大客戶端訪問個數。 

Semaphore 實現的功能就類似廁所有 5 個坑,假如有10個人要上廁所,那么同時只能有多少個人去上廁所呢?同時只能有5個人能夠占用,當 5 個人中的任何一個人讓開后,其中等待的另外5個人中又有一個人可以占用了。另外等待的5個人中可以是隨機獲得優先機會,也可以是按照先來后到的順序獲得機會,這取決于構造 Semaphore 對象時傳入的參數選項。單個信號量的 Semaphore 對象可以實現互斥鎖的功能,并且可以是由一個線程獲得了“鎖”,再由另一個線程釋放“鎖”,這可應用于死鎖恢復的一些場合。

Semaphore 維護了當前訪問的個數,提供同步機制,控制同時訪問的個數。在數據結構中鏈表可以保存“無限”的節點,用 Semaphore 可以實現有限大小的鏈表。另外重入鎖 ReentrantLock 也可以實現該功能,但實現上要復雜些。 

如何解析Semaphore信號量

如何解析Semaphore信號量

如何解析Semaphore信號量

acquire()這里我定義了 10 個人要上廁所,但是只有 5 個坑位,每個人消耗隨機的時間,直接運行上面這段代碼,可以看到一開始進去了 5 個人,后來就是陸陸續續的有人進,有人出了。但是正在使用的一定不會超過 5 個的。

acquire()      

如何解析Semaphore信號量

如果沒有可用的許可,則在發生以下兩種情況之一前,禁止將當前線程用于線程安排目的并使其處于休眠狀態:某些其他線程調用此信號量的 release()方法,并且當前線程是下一個要被分配許可的線程;或者其他某些線程中斷當前線程。從此信號量獲取一個許可,在提供一個許可前一直將線程阻塞,否則線程被中斷。獲取一個許可(如果提供了一個)并立即返回,將可用的許可數減 1。

如果當前線程:被此方法將其已中斷狀態設置為 on ;或者在等待許可時被中斷。則拋出 InterruptedException,并且清除當前線程的已中斷狀態。 

release()      

如何解析Semaphore信號量

釋放一個許可,將其返回給信號量。釋放一個許可,將可用的許可數增加 1。如果任意線程試圖獲取許可,則選中一個線程并將剛剛釋放的許可給予它。然后針對線程安排目的啟用(或再啟用)該線程。
不要求釋放許可的線程必須通過調用 acquire() 來獲取許可。通過應用程序中的編程約定來建立信號量的正確用法。

另外兩個不常用的方法,public int availablePermits()查看現在可用的信號量。public int drainPermits(),這個方法返回即可所有的許可數目,并將許可置 0。public Semaphore(int permits) 其中參數permits就是允許同時運行的線程數目。

關于如何解析Semaphore信號量 就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广宁县| 宁明县| 乌恰县| 永丰县| 高要市| 沭阳县| 萨迦县| 江川县| 沙坪坝区| 修武县| 大兴区| 威海市| 盖州市| 连州市| 新巴尔虎右旗| 武冈市| 开鲁县| 神农架林区| 凉城县| 霞浦县| 沾化县| 宁乡县| 巴林左旗| 永康市| 昆山市| 屏南县| 东乌珠穆沁旗| 麻城市| 郯城县| 长春市| 深泽县| 边坝县| 那坡县| 五常市| 乌恰县| 嘉黎县| 黄浦区| 富平县| 桓台县| 旬阳县| 井陉县|