Semaphore.TryAcquire 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| TryAcquire(Int32) |
只有在召喚時所有許可證均已可用時,才會從此信號量取得指定數量的許可證。 |
| TryAcquire(Int32, Int64, TimeUnit) |
若所有許可在等待時間內全部可用且目前執行緒未被 Thread#interrupt 中斷,則從此信號量取得指定數量的許可。 |
| TryAcquire(Int64, TimeUnit) |
若在指定等待時間內有該信號量可用且目前執行緒未被 Thread#interrupt 中斷,則會從此信號量取得許可。 |
| TryAcquire() |
只有在召喚時有許可證時,才會從此信號旗取得許可。 |
TryAcquire(Int32)
只有在召喚時所有許可證均已可用時,才會從此信號量取得指定數量的許可證。
[Android.Runtime.Register("tryAcquire", "(I)Z", "GetTryAcquire_IHandler")]
public virtual bool TryAcquire(int permits);
[<Android.Runtime.Register("tryAcquire", "(I)Z", "GetTryAcquire_IHandler")>]
abstract member TryAcquire : int -> bool
override this.TryAcquire : int -> bool
參數
- permits
- Int32
需取得許可證數量
傳回
true 如果取得 false 許可證或其他情況
- 屬性
例外狀況
若為 permits 負
備註
只有在召喚時所有許可證均已可用時,才會從此信號量取得指定數量的許可證。
取得指定數量的許可證(若有),並立即返回,價值 true為 ,減少可用許可證數量。
若許可證數量不足,則此方法會立即返回, false 且許可證數量不變。
即使這個信號量已設定為公平排序政策,呼叫 tryAcquire<em><> 也會立即取得許可證(如果有),不論其他執行緒是否在等待。 這個 ”駁船”在某些情況下,行為有時仍可能有用,儘管它違反了公平。 如果你想尊重公平設定,那就用 #tryAcquire(int, long, TimeUnit) tryAcquire(permits, 0, TimeUnit.SECONDS) 幾乎等同的設定(它也能偵測中斷)。
Java 文件 java.util.concurrent.Semaphore.tryAcquire(int)。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
TryAcquire(Int32, Int64, TimeUnit)
若所有許可在等待時間內全部可用且目前執行緒未被 Thread#interrupt 中斷,則從此信號量取得指定數量的許可。
[Android.Runtime.Register("tryAcquire", "(IJLjava/util/concurrent/TimeUnit;)Z", "GetTryAcquire_IJLjava_util_concurrent_TimeUnit_Handler")]
public virtual bool TryAcquire(int permits, long timeout, Java.Util.Concurrent.TimeUnit? unit);
[<Android.Runtime.Register("tryAcquire", "(IJLjava/util/concurrent/TimeUnit;)Z", "GetTryAcquire_IJLjava_util_concurrent_TimeUnit_Handler")>]
abstract member TryAcquire : int * int64 * Java.Util.Concurrent.TimeUnit -> bool
override this.TryAcquire : int * int64 * Java.Util.Concurrent.TimeUnit -> bool
參數
- permits
- Int32
需取得許可證數量
- timeout
- Int64
等待許可證的最長時間
- unit
- TimeUnit
論證的時間 timeout 單位
傳回
true 若所有許可證均已取得,且 false 等待時間已過後取得所有許可證
- 屬性
例外狀況
如果目前執行緒被中斷
若為 permits 負
備註
若所有許可在等待時間內全部可用且目前執行緒未被 Thread#interrupt 中斷,則從此信號量取得指定數量的許可。
取得指定數量的許可證(若有),並立即返回,價值 true為 ,減少可用許可證數量。
若許可不足,當前執行緒將因執行緒排程而停用,並處於休眠狀態,直到以下三種情況之一發生:ul<li 其他執行緒>呼叫該信號量的方法之一,當前執行緒接著被分配許可,且可用許可數量滿足此請求;或 <li>其他執行緒 Thread#interrupt 中斷當前執行緒;或 #release() releaseli<><>指定的等待時間已過。
</ul>
若取得許可證,價值 true 將被退還。
如果目前執行緒:<ul><li>在進入此方法時已設定中斷狀態;或 <li>在等待取得許可時被 Thread#interrupted 中斷,<則>會拋出 /ulInterruptedException,當前執行緒的中斷狀態會被清除。 原本應指派給此執行緒的許可,反而被分配給其他試圖取得許可的執行緒,就像這些許可是透過呼叫 #release()取得 。
若等待時間達到指定時間,則會回傳該值 false 。 若時間小於或等於零,該方法將完全不等待。 原本應指派給此執行緒的許可,反而被分配給其他試圖取得許可的執行緒,就像這些許可是透過呼叫 #release()取得 。
Java 文件 java.util.concurrent.Semaphore.tryAcquire(int, long, java.util.concurrent.TimeUnit)。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
TryAcquire(Int64, TimeUnit)
若在指定等待時間內有該信號量可用且目前執行緒未被 Thread#interrupt 中斷,則會從此信號量取得許可。
[Android.Runtime.Register("tryAcquire", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryAcquire_JLjava_util_concurrent_TimeUnit_Handler")]
public virtual bool TryAcquire(long timeout, Java.Util.Concurrent.TimeUnit? unit);
[<Android.Runtime.Register("tryAcquire", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryAcquire_JLjava_util_concurrent_TimeUnit_Handler")>]
abstract member TryAcquire : int64 * Java.Util.Concurrent.TimeUnit -> bool
override this.TryAcquire : int64 * Java.Util.Concurrent.TimeUnit -> bool
參數
- timeout
- Int64
等待許可的最長時間
- unit
- TimeUnit
論證的時間 timeout 單位
傳回
true 如果已取得許可證,且 false 等待時間已過後才取得許可證
- 屬性
例外狀況
如果目前執行緒被中斷
備註
若在指定等待時間內有該信號量可用且目前執行緒未被 Thread#interrupt 中斷,則會從此信號量取得許可。
取得許可證(若有),並立即返回,價值 true為 ,可申請許可證數量減少一。
若無許可可用,則當前執行緒在執行緒排程中被停用,並處於休眠狀態,直到以下三種情況之一發生: <ul><li>其他執行緒 #release 呼叫該信號量的方法,且當前執行緒接著被指派許可;或 <li>其他執行緒 Thread#interrupt 中斷當前執行緒;或 <li>指定的等待時間過去。
</ul>
若取得許可證,價值 true 會被退還。
如果目前執行緒:<ul><li>在進入此方法時已設定中斷狀態;或 <li>在等待取得許可期間被 Thread#interrupted 中斷,<則>會拋出 /ulInterruptedException,當前執行緒的中斷狀態會被清除。
若等待時間達到指定時間,則會回傳該值 false 。 若時間小於或等於零,該方法將完全不等待。
Java 文件 java.util.concurrent.Semaphore.tryAcquire(long, java.util.concurrent.TimeUnit)。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
TryAcquire()
只有在召喚時有許可證時,才會從此信號旗取得許可。
[Android.Runtime.Register("tryAcquire", "()Z", "GetTryAcquireHandler")]
public virtual bool TryAcquire();
[<Android.Runtime.Register("tryAcquire", "()Z", "GetTryAcquireHandler")>]
abstract member TryAcquire : unit -> bool
override this.TryAcquire : unit -> bool
傳回
true 是否取得 false 許可證或其他情況
- 屬性
備註
只有在召喚時有許可證時,才會從此信號旗取得許可。
取得許可證(若有),並立即返回,價值 true為 ,可申請許可證數量減少一。
若無許可,則此方法會立即返回 ,並取得 值。false
即使這個信號量已設定為公平排序政策,呼叫 tryAcquire()<em><> 也會立即取得許可證(如果有),不論其他執行緒是否在等待。 這個 ”駁船”在某些情況下,行為有時仍可能有用,儘管它違反了公平。 如果你想尊重公平設定,那就用 #tryAcquire(long, TimeUnit) tryAcquire(0, TimeUnit.SECONDS) 幾乎等同的設定(它也能偵測中斷)。
Java 文件 java.util.concurrent.Semaphore.tryAcquire()。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。