語言

Semaphore.TryAcquire 方法

定義

多載

名稱 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 所創建與分享的作品,並依授權條款所描述的使用進行修改。

適用於