Semaphore的介紹和使用

2022-05-22 09:36:13 字數 1170 閱讀 1778

**:

public class semaphore extends object implements serializable

乙個計數訊號量。從概念上講,訊號量維護了乙個許可集。如有必要,在許可可用前會阻塞每乙個 acquire(),然後再獲取該許可。每個 release() 新增乙個許可,從而可能釋放乙個正在阻塞的獲取者。但是,不使用實際的許可物件,semaphore 只對可用許可的號碼進行計數,並採取相應的行動。拿到訊號量的執行緒可以進入**,否則就等待。通過acquire()和release()獲取和釋放訪問許可。

public void acquire() throws interruptedexception

從此訊號量獲取乙個許可,在提供乙個許可前一直將執行緒阻塞,否則執行緒被中斷。獲取乙個許可(如果提供了乙個)並立即返回,將可用的許可數減 1。

如果沒有可用的許可,則在發生以下兩種情況之一前,禁止將當前執行緒用於執行緒安排目的並使其處於休眠狀態:

某些其他執行緒呼叫此訊號量的 release() 方法,並且當前執行緒是下乙個要被分配許可的執行緒;或者其他某些執行緒中斷當前執行緒。

如果當前執行緒:

被此方法將其已中斷狀態設定為 on ;或者在等待許可時被中斷。則丟擲 interruptedexception,並且清除當前執行緒的已中斷狀態。

丟擲:interruptedexception - 如果當前執行緒被中斷

public void release()

釋放乙個許可,將其返回給訊號量。釋放乙個許可,將可用的許可數增加 1。如果任意執行緒試圖獲取許可,則選中乙個執行緒並將剛剛釋放的許可給予它。然後針對執行緒安排目的啟用(或再啟用)該執行緒。

不要求釋放許可的執行緒必須通過呼叫 acquire() 來獲取許可。通過應用程式中的程式設計約定來建立訊號量的正確用法。

下面的例子只允許5個執行緒同時進入執行acquire()和release()之間的**:

public class semaphoretest  catch (interruptedexception e)   

} };

exec.execute(run);

} // 退出執行緒池

exec.shutdown();

} }

xtrabackup的介紹和使用

xtrabackup是第三方的mysql熱備工具 這裡能找到你想要的xtrabackup版本 安裝xtrabackup tar zxvf p ercona xtrabackup 2.0.1 446.tar.gz cd percona xtrabackup 2.0.1 value alias serv...

Ubuntu PPA的介紹和使用

ppa是personal package archives首字母簡寫。翻譯是 個人軟體包文件 只有ubuntu使用者可以用,而所有的ppa都是寄存在launchpad.net 上。launchpad 啟動器 是canonical公司所架設的 是乙個提供維護 支援或連絡ubuntu開發者的平台。其中l...

Cookie的介紹和使用

設定cookie 每個cookie都是乙個名 值對,可以把下面這樣乙個字串賦值給document.cookie document.cookie userid 828 如果要一次儲存多個名 值對,可以使用分號加空格 隔開,例如 document.cookie userid 828 username h...