IBlockingQueue Interfaz
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í.
que Queue
además admite operaciones que esperan a que la cola deje de estar vacía al recuperar un elemento y espere a que el espacio esté disponible en la cola al almacenar un elemento.
[Android.Runtime.Register("java/util/concurrent/BlockingQueue", "", "Java.Util.Concurrent.IBlockingQueueInvoker")]
[Java.Interop.JavaTypeParameters(new System.String[] { "E" })]
public interface IBlockingQueue : IDisposable, Java.Interop.IJavaPeerable, Java.Util.IQueue
[<Android.Runtime.Register("java/util/concurrent/BlockingQueue", "", "Java.Util.Concurrent.IBlockingQueueInvoker")>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "E" })>]
type IBlockingQueue = interface
interface IQueue
interface ICollection
interface IIterable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- Derivado
- Atributos
- Implementaciones
Comentarios
que Queue
además admite operaciones que esperan a que la cola deje de estar vacía al recuperar un elemento y espere a que el espacio esté disponible en la cola al almacenar un elemento.
BlockingQueue
Los métodos vienen en cuatro formas, con diferentes formas de controlar las operaciones que no se pueden satisfacer inmediatamente, pero que pueden cumplirse en algún momento en el futuro: uno produce una excepción, el segundo devuelve un valor especial (ya sea null
o false
, dependiendo de la operación), el tercero bloquea el subproceso actual indefinidamente hasta que la operación pueda realizarse correctamente y el cuarto bloque solo para un límite de tiempo máximo determinado antes de abandonar. Estos métodos se resumen en la tabla siguiente:
<table class="plain">caption Summary of BlockingQueue methods</caption><tr><td></td><th scope="col" style="font-weight:normal; font-style:italic">Throws exception</th><scope="col" style="font-weight:normal; font-style:italic">Special value</th<>scope="col" style="font-weight:normal; font-style:italic">Blocks</th<>scope="col" style="font-weight:normal;>< font-style:italic">Times out</th></tr tr><><th scope="row" style="text-align:left">Insert</th td#add(Object) add(e)
></td#offer(Object) offer(e)
<>>< td/td>><#put(Object) put(e)
< td td/td<>#offer(Object, long, TimeUnit) offer(e, time, unit)
<> td<>/tr tr<>><th scope="row" style="text-align:left">Remove</th<<>>td#remove() remove()
<>/<>td td/td td/td>#poll() poll()
<><td><#take() take()
/td><td>#poll(long, TimeUnit) poll(time, unit)
</td></tr tr>><<th scope="row" style="text-align:left">Examine</th<>td>#element() element()
</td><#peek() peek()
>< td/td td td><style="font-style: italic">not applicable</td td<>style="font-style: italic">not applicable</td></tr></table>
Un BlockingQueue
no acepta null
elementos. Las implementaciones inician NullPointerException
intentos add
en o offer
put
en .null
null
Se usa como un valor centinela para indicar errores de poll
operaciones.
Un BlockingQueue
puede estar limitado por la capacidad. En cualquier momento dado puede tener un remainingCapacity
elemento más allá del cual ningún elemento adicional puede ser put
sin bloqueo. Un BlockingQueue
sin restricciones de capacidad intrínsecas siempre informa de una capacidad restante de Integer.MAX_VALUE
.
BlockingQueue
Las implementaciones están diseñadas para usarse principalmente para las colas de consumidores de productor, pero además admiten la Collection
interfaz . Por lo tanto, por ejemplo, es posible quitar un elemento arbitrario de una cola mediante remove(x)
. Sin embargo, estas operaciones se realizan en general <em>not</em> de forma muy eficaz y están pensadas solo para uso ocasional, como cuando se cancela un mensaje en cola.
BlockingQueue
las implementaciones son seguras para subprocesos. Todos los métodos de puesta en cola logran sus efectos de forma atómica mediante bloqueos internos u otras formas de control de simultaneidad. Sin embargo, las <operaciones em bulk</em> Collection , retainAll
containsAll
y removeAll
son <em>not</em> necesariamente realizadas de forma atómica a menos que se especifique lo contrario en una implementación.addAll
> Por lo tanto, es posible, por ejemplo, para addAll(c)
producir un error (iniciar una excepción) después de agregar solo algunos de los elementos en c
.
A BlockingQueue
no <soporta><> intrínsecamente ningún tipo de " close" o " apagar" operación para indicar que no se agregarán más elementos. Las necesidades y el uso de estas características tienden a depender de la implementación. Por ejemplo, una táctica común es que los productores inserten objetos especiales <em>end-of-stream</em> o <em>poison</em> , que se interpretan en consecuencia cuando los consumidores toman.
Ejemplo de uso, basado en un escenario típico de productor-consumidor. Tenga en cuenta que un BlockingQueue
objeto se puede usar de forma segura con varios productores y varios consumidores.
{@code
class Producer implements Runnable {
private final BlockingQueue queue;
Producer(BlockingQueue q) { queue = q; }
public void run() {
try {
while (true) { queue.put(produce()); }
} catch (InterruptedException ex) { ... handle ...}
}
Object produce() { ... }
}
class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) { queue = q; }
public void run() {
try {
while (true) { consume(queue.take()); }
} catch (InterruptedException ex) { ... handle ...}
}
void consume(Object x) { ... }
}
class Setup {
void main() {
BlockingQueue q = new SomeQueueImplementation();
Producer p = new Producer(q);
Consumer c1 = new Consumer(q);
Consumer c2 = new Consumer(q);
new Thread(p).start();
new Thread(c1).start();
new Thread(c2).start();
}
}}
Efectos de coherencia de memoria: al igual que con otras colecciones simultáneas, las acciones de un subproceso antes de colocar un objeto en una BlockingQueue
<acción i>before</i> posterior al acceso o eliminación de ese elemento de BlockingQueue
en otro subproceso.
Esta interfaz es miembro de Java Collections Framework.
Agregado en 1.5.
Documentación de Java para java.util.concurrent.BlockingQueue
.
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.
Propiedades
Handle |
Obtiene el valor JNI del objeto Android subyacente. (Heredado de IJavaObject) |
IsEmpty |
Devuelve si no |
JniIdentityHashCode |
Devuelve el valor de |
JniManagedPeerState |
Estado del mismo nivel administrado. (Heredado de IJavaPeerable) |
JniPeerMembers |
Compatibilidad con la invocación y el acceso de miembros. (Heredado de IJavaPeerable) |
PeerReference |
Devuelve una JniObjectReference de la instancia de objeto Java ajustada. (Heredado de IJavaPeerable) |
Métodos
Add(Object) |
Inserta el elemento especificado en esta cola si es posible hacerlo inmediatamente sin infringir las restricciones de capacidad, volviendo |
AddAll(ICollection) |
Agrega todos los elementos de la colección especificada a esta colección (operación opcional). (Heredado de ICollection) |
Clear() |
Quita todos los elementos de esta colección (operación opcional). (Heredado de ICollection) |
Contains(Object) |
Devuelve |
ContainsAll(ICollection) |
Devuelve |
Disposed() |
Se llama cuando se ha eliminado la instancia. (Heredado de IJavaPeerable) |
DisposeUnlessReferenced() |
Si no hay referencias pendientes a esta instancia, llama a |
DrainTo(ICollection) |
Quita todos los elementos disponibles de esta cola y los agrega a la colección especificada. |
DrainTo(ICollection, Int32) |
Quita como máximo el número dado de elementos disponibles de esta cola y los agrega a la colección especificada. |
Element() |
Recupera, pero no quita, el encabezado de esta cola. (Heredado de IQueue) |
Equals(Object) |
Compara el objeto especificado con esta colección para obtener igualdad. (Heredado de ICollection) |
Finalized() |
Se llama cuando se ha finalizado la instancia. (Heredado de IJavaPeerable) |
ForEach(IConsumer) |
Realiza la acción dada para cada elemento de |
GetHashCode() |
Devuelve el valor de código hash de esta colección. (Heredado de ICollection) |
Iterator() |
Devuelve un iterador sobre los elementos de esta colección. (Heredado de ICollection) |
Offer(Object) |
Inserta el elemento especificado en esta cola si es posible hacerlo inmediatamente sin infringir las restricciones de capacidad, volviendo |
Offer(Object, Int64, TimeUnit) |
Inserta el elemento especificado en esta cola, esperando hasta el tiempo de espera especificado si es necesario para que el espacio esté disponible. |
Peek() |
Recupera, pero no quita, el encabezado de esta cola o devuelve |
Poll() |
Recupera y quita el encabezado de esta cola o devuelve |
Poll(Int64, TimeUnit) |
Recupera y quita el encabezado de esta cola, esperando hasta el tiempo de espera especificado si es necesario para que un elemento esté disponible. |
Put(Object) |
Inserta el elemento especificado en esta cola, esperando si es necesario para que el espacio esté disponible. |
RemainingCapacity() |
Devuelve el número de elementos adicionales que esta cola puede aceptar idealmente (en ausencia de restricciones de memoria o recursos) sin bloqueo o |
Remove() |
Recupera y quita el encabezado de esta cola. (Heredado de IQueue) |
Remove(Object) |
Quita una sola instancia del elemento especificado de esta cola, si está presente. |
RemoveAll(ICollection) |
Quita todos los elementos de esta colección que también están incluidos en la colección especificada (operación opcional). (Heredado de ICollection) |
RemoveIf(IPredicate) |
Quita todos los elementos de esta colección que satisfacen el predicado especificado. (Heredado de ICollection) |
RetainAll(ICollection) |
Conserva solo los elementos de esta colección que se encuentran en la colección especificada (operación opcional). (Heredado de ICollection) |
SetJniIdentityHashCode(Int32) |
Establezca el valor devuelto por |
SetJniManagedPeerState(JniManagedPeerStates) |
que |
SetPeerReference(JniObjectReference) |
Establezca el valor devuelto por |
Size() |
Devuelve el número de elementos de esta colección. (Heredado de ICollection) |
Spliterator() |
Crea un |
Take() |
Recupera y quita el encabezado de esta cola, esperando si es necesario hasta que un elemento esté disponible. |
ToArray() |
Devuelve una matriz que contiene todos los elementos de esta colección. (Heredado de ICollection) |
ToArray(IIntFunction) |
Devuelve una matriz que contiene todos los elementos de esta colección, utilizando la función proporcionada |
ToArray(Object[]) |
Devuelve una matriz que contiene todos los elementos de esta colección; el tipo en tiempo de ejecución de la matriz devuelta es el de la matriz especificada. (Heredado de ICollection) |
UnregisterFromRuntime() |
Anule el registro de esta instancia para que el entorno de ejecución no lo devuelva de invocaciones futuras Java.Interop.JniRuntime+JniValueManager.PeekValue . (Heredado de IJavaPeerable) |
Implementaciones de interfaz explícitas
IIterable.Spliterator() |
Crea un elemento |
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) |
que |
GetJniTypeName(IJavaPeerable) |
que |
OfferAsync(IBlockingQueue, Object) |
que |
OfferAsync(IBlockingQueue, Object, Int64, TimeUnit) |
que |
PollAsync(IBlockingQueue, Int64, TimeUnit) |
que |
PutAsync(IBlockingQueue, Object) |
que |
TakeAsync(IBlockingQueue) |
que |
ToEnumerable(IIterable) |
que |
ToEnumerable<T>(IIterable) |
que |