ReentrantLock 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。
[Android.Runtime.Register("java/util/concurrent/locks/ReentrantLock", DoNotGenerateAcw=true)]
public class ReentrantLock : Java.Lang.Object, IDisposable, Java.IO.ISerializable, Java.Util.Concurrent.Locks.ILock
[<Android.Runtime.Register("java/util/concurrent/locks/ReentrantLock", DoNotGenerateAcw=true)>]
type ReentrantLock = class
inherit Object
interface ISerializable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface ILock
- 繼承
- 屬性
- 實作
備註
一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。
A ReentrantLock 是 <em>擁有</> em 屬於最後成功鎖定但尚未解鎖的執行緒。 當執行緒不被其他執行緒擁有時,執行 lock 緒會返回並成功取得該鎖。 如果目前執行緒已經擁有該鎖,該方法會立即回傳。 這可以用方法 #isHeldByCurrentThread檢查,且 #getHoldCount。
此類別的建構子接受一個可選 <的 em>公平<性/em> 參數。 當設 true為 時,鎖會優先允許存取等待時間最長的執行緒。 否則,此鎖無法保證任何特定的存取順序。 使用公平鎖且由多個執行緒存取的程式,可能顯示出較低的整體吞吐量(即較慢;通常遠慢),但取得鎖及保證不飢餓的時間變異較小。 但請注意,鎖的公平性並不保證執行緒排程的公平性。 因此,許多使用公平鎖的執行緒中,可能有一個執行緒能連續多次取得該鎖,而其他活躍執行緒則未繼續執行且未持有該鎖。 另外要注意,無計時 #tryLock() 法並不尊重公平設定。 只要鎖可用,即使其他執行緒在等待,它也會成功。
建議做法是 <em>總是</> em 緊接著呼叫 to lock 並加上 try 區塊,最常見的是在前後對比結構中,例如:
{@code
class X {
private final ReentrantLock lock = new ReentrantLock();
// ...
public void m() {
lock.lock(); // block until condition holds
try {
// ... method body
} finally {
lock.unlock();
}
}
}}
除了實作介面外 Lock ,這個類別還定義了多種 public 和 protected 方法來檢查鎖的狀態。 其中一些方法僅適用於儀器安裝與監測。
此類序列化的行為與內建鎖相同:解序列化鎖無論序列化時為何狀態,都會處於解鎖狀態。
此鎖最多支援同一執行緒2147483647個遞迴鎖。 嘗試超過此限制時,會因 Error 鎖定方式投擲。
已在1.5中新增。
Java 文件 java.util.concurrent.locks.ReentrantLock。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| ReentrantLock() |
建立 的實例 |
| ReentrantLock(Boolean) |
建立一個與給定公平政策相關的實例 |
| ReentrantLock(IntPtr, JniHandleOwnership) |
用於建立 JNI 物件受管理表示的建構器;由執行時呼叫。 |
屬性
| 名稱 | Description |
|---|---|
| Class |
回傳此 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| HasQueuedThreads |
查詢是否有執行緒正在等待取得此鎖。 |
| HoldCount |
查詢目前執行緒對此鎖的保留次數。 |
| IsFair |
如果該鎖的公平性設定為真,則回傳 |
| IsHeldByCurrentThread |
查詢目前執行緒是否持有此鎖。 |
| IsLocked |
查詢此鎖是否被任何執行緒持有。 |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
一種重入互斥 |
| JniPeerMembers |
取得用於調用此 Java 節點成員的 JNI 元資料。 |
| Owner |
回傳目前擁有此鎖的執行緒,或 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| QueuedThreads |
回傳一個包含可能等待取得此鎖的執行緒的集合。 |
| QueueLength |
回傳等待取得此鎖的執行緒數量估計值。 |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
方法
| 名稱 | Description |
|---|---|
| Clone() |
建立並回傳此物件的副本。 (繼承來源 Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
一種重入互斥 |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
一種重入互斥 |
| Equals(Object) |
一種重入互斥 |
| Equals(Object) |
表示是否有其他物體「等同」於此物。 (繼承來源 Object) |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| GetWaitingThreads(ICondition) |
回傳一個包含可能等待該鎖條件的執行緒的集合。 |
| GetWaitQueueLength(ICondition) |
回傳一個估計在該鎖條件下等待執行緒數量的估計值。 |
| HasQueuedThread(Thread) |
查詢給定執行緒是否正在等待取得此鎖。 |
| HasWaiters(ICondition) |
查詢是否有執行緒正在等待與此鎖相關的條件。 |
| JavaFinalize() |
已淘汰.
當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。 (繼承來源 Object) |
| Lock() |
取得鎖。 |
| LockInterruptibly() |
除非目前執行緒被 Thread#interrupt 中斷,否則會取得鎖。 |
| NewCondition() |
回傳一個 |
| Notify() |
喚醒一個正在該物件監視器上等待的執行緒。 (繼承來源 Object) |
| NotifyAll() |
喚醒所有等待該物件監視器的執行緒。 (繼承來源 Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
一種重入互斥 |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| TryLock() |
只有在呼叫時鎖未被其他執行緒持有時,才會取得該鎖。 |
| TryLock(Int64, TimeUnit) |
若在指定等待時間內未被其他執行緒持有,且當前執行緒未被 Thread#interrupt 中斷,則會取得該鎖。 |
| Unlock() |
嘗試解開這個鎖。 |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
一種重入互斥 |
| IJavaPeerable.Finalized() |
一種重入互斥 |
| IJavaPeerable.JniObjectReferenceControlBlock |
一種重入互斥 |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
一種重入互斥 |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
一種重入互斥 |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
一種重入互斥 |
| IJavaPeerable.UnregisterFromRuntime() |
一種重入互斥 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
一種重入互斥 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |