Compartir a través de


LockSupport Clase

Definición

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
LockSupport
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 parkla 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 Objectobjeto .

(Heredado de Object)
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 #getBlocker getBlocker para el subproceso actual.

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.

Se aplica a