LockSupport Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización.
[Android.Runtime.Register("java/util/concurrent/locks/LockSupport", DoNotGenerateAcw=true)]
public class LockSupport : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/locks/LockSupport", DoNotGenerateAcw=true)>]
type LockSupport = class
inherit Object
- Herencia
- Atributos
Comentarios
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización.
Esta clase asocia, con cada subproceso que lo usa, un permiso (en el sentido de la java.util.concurrent.Semaphore Semaphore
clase). Una llamada a park
devolverá inmediatamente si el permiso está disponible, consumándolo en el proceso; de lo contrario <, em>may</em> block. Una llamada a unpark
hace que el permiso esté disponible, si aún no estaba disponible. (A diferencia de los semáforos, sin embargo, los permisos no se acumulan. Hay al menos uno). El uso confiable requiere el uso de variables volátiles (o atómicas) para controlar cuándo se debe estacionar o desaparar. Las ordenaciones de las llamadas a estos métodos se mantienen con respecto a los accesos de variables volátiles, pero no necesariamente a los accesos de variables no volátiles.
Los métodos park
y unpark
proporcionan medios eficaces para bloquear y desbloquear subprocesos que no encuentran los problemas que provocan los métodos Thread.suspend
en desuso y Thread.resume
que no se pueden usar para tales propósitos: las carreras entre una invocación de subprocesos park
y otro subproceso que intenta unpark
conservar la vida, debido al permiso. Además, park
devolverá si se interrumpió el subproceso del autor de la llamada y se admiten versiones de tiempo de espera. El park
método también puede devolver en cualquier otro momento, por "ningún motivo", por lo que, en general, debe invocarse dentro de un bucle que vuelva a comprobar las condiciones tras la devolución. En este sentido park
sirve como una optimización de una "espera ocupada" que no pierde tanto tiempo girando, pero debe emparejarse con un unpark
para ser eficaz.
Las tres formas de park
cada una también admiten un blocker
parámetro de objeto. Este objeto se registra mientras el subproceso está bloqueado para permitir la supervisión y las herramientas de diagnóstico para identificar las razones por las que se bloquean los subprocesos. (Estas herramientas pueden tener acceso a los bloqueadores mediante el método #getBlocker(Thread)
). Se recomienda encarecidamente el uso de estos formularios en lugar de los formularios originales sin este parámetro. El argumento normal que se debe proporcionar como dentro blocker
de una implementación de bloqueo es this
.
Estos métodos están diseñados para usarse como herramientas para crear utilidades de sincronización de nivel superior y no son útiles para la mayoría de las aplicaciones de control de simultaneidad. El park
método está diseñado para su uso únicamente en construcciones de la forma:
{@code
while (!canProceed()) {
// ensure request to unpark is visible to other threads
...
LockSupport.park(this);
}}
donde el subproceso no publica ninguna solicitud para desaparar, antes de la llamada a park
, conlleva bloqueo o bloqueo. Dado que solo hay un permiso asociado a cada subproceso, los usos intermedios de , incluida implícitamente a través de park
la carga de clases, podrían provocar un subproceso que no responde (un "unpark perdido").
<b>Uso de ejemplo.</b> Este es un boceto de una clase de bloqueo no reentrant de primera entrada:
{@code
class FIFOMutex {
private final AtomicBoolean locked = new AtomicBoolean(false);
private final Queue<Thread> waiters
= new ConcurrentLinkedQueue<>();
public void lock() {
boolean wasInterrupted = false;
// publish current thread for unparkers
waiters.add(Thread.currentThread());
// Block while not first in queue or cannot acquire lock
while (waiters.peek() != Thread.currentThread() ||
!locked.compareAndSet(false, true)) {
LockSupport.park(this);
// ignore interrupts while waiting
if (Thread.interrupted())
wasInterrupted = true;
}
waiters.remove();
// ensure correct interrupt status on return
if (wasInterrupted)
Thread.currentThread().interrupt();
}
public void unlock() {
locked.set(false);
LockSupport.unpark(waiters.peek());
}
static {
// Reduce the risk of "lost unpark" due to classloading
Class<?> ensureLoaded = LockSupport.class;
}
}}
Agregado en 1.5.
Documentación de Java para java.util.concurrent.locks.LockSupport
.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.
Constructores
LockSupport(IntPtr, JniHandleOwnership) |
Constructor utilizado al crear representaciones administradas de objetos JNI; llamado por el tiempo de ejecución. |
Propiedades
Class |
Devuelve la clase en tiempo de ejecución de este |
Handle |
Identificador de la instancia de Android subyacente. (Heredado de Object) |
JniIdentityHashCode |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
JniPeerMembers |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. |
PeerReference |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
ThresholdClass |
Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código. |
ThresholdType |
Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código. |
Métodos
Clone() |
Crea y devuelve una copia de este objeto. (Heredado de Object) |
Dispose() |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
Dispose(Boolean) |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
Equals(Object) |
Indica si algún otro objeto es "igual a" este. (Heredado de Object) |
GetBlocker(Thread) |
Devuelve el objeto de bloqueador proporcionado a la invocación más reciente de un método park que aún no se ha desbloqueado o null si no está bloqueado. |
GetHashCode() |
Devuelve un valor de código hash del objeto. (Heredado de Object) |
JavaFinalize() |
Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto . (Heredado de Object) |
Notify() |
Activa un único subproceso que está esperando en el monitor de este objeto. (Heredado de Object) |
NotifyAll() |
Activa todos los subprocesos que están esperando en el monitor de este objeto. (Heredado de Object) |
Park() |
Deshabilita el subproceso actual con fines de programación de subprocesos a menos que el permiso esté disponible. |
Park(Object) |
Deshabilita el subproceso actual con fines de programación de subprocesos a menos que el permiso esté disponible. |
ParkNanos(Int64) |
Deshabilita el subproceso actual con fines de programación de subprocesos, hasta el tiempo de espera especificado, a menos que el permiso esté disponible. |
ParkNanos(Object, Int64) |
Deshabilita el subproceso actual con fines de programación de subprocesos, hasta el tiempo de espera especificado, a menos que el permiso esté disponible. |
ParkUntil(Int64) |
Deshabilita el subproceso actual con fines de programación de subprocesos, hasta la fecha límite especificada, a menos que el permiso esté disponible. |
ParkUntil(Object, Int64) |
Deshabilita el subproceso actual con fines de programación de subprocesos, hasta la fecha límite especificada, a menos que el permiso esté disponible. |
SetCurrentBlocker(Object) |
Establece el objeto que se va a devolver mediante invocaciones de |
SetHandle(IntPtr, JniHandleOwnership) |
Establece la propiedad Handle. (Heredado de Object) |
ToArray<T>() |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
ToString() |
Devuelve una representación de cadena del objeto. (Heredado de Object) |
Unpark(Thread) |
Pone a disposición el permiso para el subproceso dado, si aún no estaba disponible. |
UnregisterFromRuntime() |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
Wait() |
Hace que el subproceso actual espere hasta que se despierta, normalmente por ser em notificado/em> o <em>interrumpido</em>.<>< (Heredado de Object) |
Wait(Int64) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
Wait(Int64, Int32) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
Implementaciones de interfaz explícitas
IJavaPeerable.Disposed() |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
IJavaPeerable.DisposeUnlessReferenced() |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
IJavaPeerable.Finalized() |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
IJavaPeerable.JniManagedPeerState |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. (Heredado de Object) |
Métodos de extensión
JavaCast<TResult>(IJavaObject) |
Realiza una conversión de tipos comprobados en tiempo de ejecución de Android. |
JavaCast<TResult>(IJavaObject) |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. |
GetJniTypeName(IJavaPeerable) |
Primitivos básicos de bloqueo de subprocesos para crear bloqueos y otras clases de sincronización. |