語言

ReentrantLock 類別

定義

一種重入互斥 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
繼承
ReentrantLock
屬性
實作

備註

一種重入互斥 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 ,這個類別還定義了多種 publicprotected 方法來檢查鎖的狀態。 其中一些方法僅適用於儀器安裝與監測。

此類序列化的行為與內建鎖相同:解序列化鎖無論序列化時為何狀態,都會處於解鎖狀態。

此鎖最多支援同一執行緒2147483647個遞迴鎖。 嘗試超過此限制時,會因 Error 鎖定方式投擲。

已在1.5中新增。

Java 文件 java.util.concurrent.locks.ReentrantLock

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

建構函式

名稱 Description
ReentrantLock()

建立 的實例 ReentrantLock

ReentrantLock(Boolean)

建立一個與給定公平政策相關的實例 ReentrantLock

ReentrantLock(IntPtr, JniHandleOwnership)

用於建立 JNI 物件受管理表示的建構器;由執行時呼叫。

屬性

名稱 Description
Class

回傳此 Object的執行時類別。

(繼承來源 Object)
Handle

底層 Android 實例的帳號。

(繼承來源 Object)
HasQueuedThreads

查詢是否有執行緒正在等待取得此鎖。

HoldCount

查詢目前執行緒對此鎖的保留次數。

IsFair

如果該鎖的公平性設定為真,則回傳 true

IsHeldByCurrentThread

查詢目前執行緒是否持有此鎖。

IsLocked

查詢此鎖是否被任何執行緒持有。

JniIdentityHashCode

取得由互通執行時指派給此 Java 對等端的身份雜湊碼。

(繼承來源 Object)
JniManagedPeerState

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

(繼承來源 JavaObject)
JniPeerMembers

取得用於調用此 Java 節點成員的 JNI 元資料。

Owner

回傳目前擁有此鎖的執行緒,或 null 若未擁有則是執行緒。

PeerReference

取得這個 Java 節點的 JNI 物件參考。

(繼承來源 Object)
QueuedThreads

回傳一個包含可能等待取得此鎖的執行緒的集合。

QueueLength

回傳等待取得此鎖的執行緒數量估計值。

ThresholdClass

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

ThresholdType

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

方法

名稱 Description
Clone()

建立並回傳此物件的副本。

(繼承來源 Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

(繼承來源 JavaObject)
Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

(繼承來源 JavaObject)
Equals(Object)

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

(繼承來源 JavaObject)
Equals(Object)

表示是否有其他物體「等同」於此物。

(繼承來源 Object)
GetHashCode()

回傳物件的雜湊碼值。

(繼承來源 Object)
GetWaitingThreads(ICondition)

回傳一個包含可能等待該鎖條件的執行緒的集合。

GetWaitQueueLength(ICondition)

回傳一個估計在該鎖條件下等待執行緒數量的估計值。

HasQueuedThread(Thread)

查詢給定執行緒是否正在等待取得此鎖。

HasWaiters(ICondition)

查詢是否有執行緒正在等待與此鎖相關的條件。

JavaFinalize()
已淘汰.

當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。

(繼承來源 Object)
Lock()

取得鎖。

LockInterruptibly()

除非目前執行緒被 Thread#interrupt 中斷,否則會取得鎖。

NewCondition()

回傳一個 Condition 實例以供該 Lock 實例使用。

Notify()

喚醒一個正在該物件監視器上等待的執行緒。

(繼承來源 Object)
NotifyAll()

喚醒所有等待該物件監視器的執行緒。

(繼承來源 Object)
SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

(繼承來源 JavaObject)
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()

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

(繼承來源 JavaObject)
IJavaPeerable.Finalized()

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

(繼承來源 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

(繼承來源 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

(繼承來源 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

(繼承來源 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

(繼承來源 JavaObject)
IJavaPeerable.UnregisterFromRuntime()

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

一種重入互斥 Lock ,基本行為與語意與隱 synchronized 含監控鎖相同,透過方法與語句存取,但具備擴充功能。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於