ReentrantReadWriteLock.ReentrantWriteLock.TryLock Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Überlädt
TryLock() |
Erwirbt die Schreibsperre nur, wenn sie zum Zeitpunkt des Aufrufs nicht von einem anderen Thread gehalten wird. |
TryLock(Int64, TimeUnit) |
Erwirbt die Schreibsperre, wenn sie nicht von einem anderen Thread innerhalb der angegebenen Wartezeit gehalten wird und der aktuelle Thread nicht thread#interrupt unterbrochen wurde. |
TryLock()
Erwirbt die Schreibsperre nur, wenn sie zum Zeitpunkt des Aufrufs nicht von einem anderen Thread gehalten wird.
[Android.Runtime.Register("tryLock", "()Z", "GetTryLockHandler")]
public virtual bool TryLock ();
[<Android.Runtime.Register("tryLock", "()Z", "GetTryLockHandler")>]
abstract member TryLock : unit -> bool
override this.TryLock : unit -> bool
Gibt zurück
true
wenn die Sperre frei war und vom aktuellen Thread abgerufen wurde oder die Schreibsperre bereits vom aktuellen Thread gehalten wurde; andernfalls false
.
Implementiert
- Attribute
Hinweise
Erwirbt die Schreibsperre nur, wenn sie zum Zeitpunkt des Aufrufs nicht von einem anderen Thread gehalten wird.
Ruft die Schreibsperre ab, wenn weder die Lese- noch die Schreibsperre von einem anderen Thread gehalten wird und sofort mit dem Wert true
zurückgegeben wird, wobei die Anzahl der Schreibsperre auf eine festgelegt wird. Selbst wenn diese Sperre auf die Verwendung einer richtlinie für eine faire Reihenfolge festgelegt wurde, erhält>< ein Aufruf von tryLock()
<em>die Sperre sofort, wenn sie verfügbar ist, unabhängig davon, ob andere Threads derzeit auf die Schreibsperre warten. Dies " Barging" Das Verhalten kann unter bestimmten Umständen nützlich sein, auch wenn es die Fairness bricht. Wenn Sie die Fairnesseinstellung für diese Sperre berücksichtigen möchten, verwenden #tryLock(long, TimeUnit) tryLock(0, TimeUnit.SECONDS)
Sie dies fast gleich (es erkennt auch Unterbrechungen).
Wenn der aktuelle Thread diese Sperre bereits enthält, wird die Aufbewahrungsanzahl um eine erhöht, und die Methode gibt zurück true
.
Wenn die Sperre von einem anderen Thread gehalten wird, wird diese Methode sofort mit dem Wert false
zurückgegeben.
Java-Dokumentation für java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.tryLock()
.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.
Gilt für:
TryLock(Int64, TimeUnit)
Erwirbt die Schreibsperre, wenn sie nicht von einem anderen Thread innerhalb der angegebenen Wartezeit gehalten wird und der aktuelle Thread nicht thread#interrupt unterbrochen wurde.
[Android.Runtime.Register("tryLock", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryLock_JLjava_util_concurrent_TimeUnit_Handler")]
public virtual bool TryLock (long timeout, Java.Util.Concurrent.TimeUnit? unit);
[<Android.Runtime.Register("tryLock", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryLock_JLjava_util_concurrent_TimeUnit_Handler")>]
abstract member TryLock : int64 * Java.Util.Concurrent.TimeUnit -> bool
override this.TryLock : int64 * Java.Util.Concurrent.TimeUnit -> bool
Parameter
- timeout
- Int64
die Zeit, bis die Schreibsperre gewartet wird
- unit
- TimeUnit
die Zeiteinheit des Timeoutarguments
Gibt zurück
true
wenn die Sperre frei war und vom aktuellen Thread abgerufen wurde oder die Schreibsperre bereits vom aktuellen Thread gehalten wurde; und false
wenn die Wartezeit vor dem Erwerb der Sperre verstrichen ist.
Implementiert
- Attribute
Ausnahmen
wenn der aktuelle Thread unterbrochen wird
wenn die Zeiteinheit null ist
Hinweise
Erwirbt die Schreibsperre, wenn sie nicht von einem anderen Thread innerhalb der angegebenen Wartezeit gehalten wird und der aktuelle Thread nicht thread#interrupt unterbrochen wurde.
Ruft die Schreibsperre ab, wenn weder die Lese- noch die Schreibsperre von einem anderen Thread gehalten wird und sofort mit dem Wert true
zurückgegeben wird, wobei die Anzahl der Schreibsperre auf eine festgelegt wird. Wenn diese Sperre so festgelegt wurde, dass eine Richtlinie für eine faire Reihenfolge verwendet wird, wird<> keine verfügbare Lock <em>abgerufen, wenn andere Threads auf die Schreibsperre warten. Dies ist im Gegensatz zur #tryLock()
Methode. Wenn Sie eine zeitgesteuerte tryLock
Sperre wünschen, die das Sperren auf einer fairen Sperre zulässt, kombinieren Sie die zeitgesteuerten und nicht zeitgesteuerten Formulare zusammen:
{@code
if (lock.tryLock() ||
lock.tryLock(timeout, unit)) {
...
}}
Wenn der aktuelle Thread diese Sperre bereits enthält, wird die Aufbewahrungsanzahl um eine erhöht, und die Methode gibt zurück true
.
Wenn die Sperre von einem anderen Thread gehalten wird, wird der aktuelle Thread für Threadplanungszwecke deaktiviert und liegt ruhend, bis eines von drei Dingen passiert:
<ul>
<li>Die Schreibsperre wird vom aktuellen Thread erworben oder
<li>Ein anderer Threadthread#interrupt unterbricht den aktuellen Thread; oder
<li>Die angegebene Wartezeit verstrichen
</ul>
Wenn die Schreibsperre abgerufen wird, wird der Wert true
zurückgegeben, und die Anzahl der Schreibsperressperre wird auf eine festgelegt.
Wenn der aktuelle Thread:
<ul>
<li>hat seinen unterbrochenen Status für den Eintrag in diese Methode festgelegt; oder
<li>ist Thread#interrupt unterbrochen beim Abrufen der Schreibsperre,
</ul>
wird dann InterruptedException
ausgelöst, und der unterbrochene Status des aktuellen Threads wird gelöscht.
Wenn die angegebene Wartezeit verstrichen ist, wird der Wert false
zurückgegeben. Wenn die Zeit kleiner als oder gleich 0 ist, wartet die Methode gar nicht.
Bei dieser Implementierung, da diese Methode ein expliziter Unterbrechungspunkt ist, wird bevorzugt, auf den Interrupt gegenüber normaler oder erneuter Übernahme der Sperre zu reagieren und den Ablauf der Wartezeit zu melden.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.