Compartilhar via


IBlockingQueue Interface

Definição

Um Queue que também oferece suporte a operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um 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
Implementações

Comentários

Um Queue que também oferece suporte a operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um elemento.

BlockingQueue Os métodos vêm em quatro formas, com diferentes maneiras de lidar com operações que não podem ser satisfeitas imediatamente, mas podem ser satisfeitas em algum momento no futuro: uma lança uma exceção, a segunda retorna um valor especial (ou nullfalse, dependendo da operação), a terceira bloqueia o thread atual indefinidamente até que a operação possa ser bem-sucedida e a quarta bloqueia apenas um determinado limite máximo de tempo antes de desistir. Esses métodos são resumidos na tabela a seguir:

<table class="plain">caption Resumo dos métodos< BlockingQueue/caption<>tr<>td></td><th scope="col" style="font-weight:normal; font-style:italic">Lança exception</th<>th scope="col" style="font-weight:normal; font-style:italic">Special value</th<>th scope="col" style="font-weight:normal; font-style:italic">Blocks</th><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<>td>#offer(Object) offer(e)</td><td>#put(Object) put(e)</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>#poll() poll()</td><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<>td>#peek() peek()</td><td style="font-style: italic">not applicable</td><td style="font-style: italic">not applicable</td<>/tr></table>

A BlockingQueue não aceita null elementos. As implementações lançam NullPointerException sobre as tentativas de add, put ou offer um nullarquivo . A null é usado como um valor sentinela para indicar falha de poll operações.

A BlockingQueue pode ser limitada pela capacidade. A qualquer momento, pode ter um remainingCapacity além do qual nenhum elemento adicional pode estar put sem bloqueio. Um BlockingQueue sem quaisquer restrições de capacidade intrínsecas sempre relata uma capacidade restante de Integer.MAX_VALUE.

BlockingQueue As implementações são projetadas para serem usadas principalmente para filas produtor-consumidor, mas também oferecem suporte à Collection interface. Assim, por exemplo, é possível remover um elemento arbitrário de uma fila usando remove(x)o . No entanto, tais operações são, em geral<, realizadas>>< de forma muito eficiente, e destinam-se apenas a uso ocasional, como quando uma mensagem em fila é cancelada.

BlockingQueue as implementações são thread-safe. Todos os métodos de enfileiramento atingem seus efeitos atomicamente usando bloqueios internos ou outras formas de controle de simultaneidade. No entanto, as <operações de coleta em>massa</em> , retainAllcontainsAlle removeAll são <em>não</em> necessariamente executadas atomicamente, a menos que especificado de outra forma em uma addAllimplementação. Assim, é possível, por exemplo, addAll(c) falhar (lançar uma exceção) depois de adicionar apenas alguns dos elementos no c.

A BlockingQueue não <suporta><> intrinsecamente qualquer tipo de " fechar" ou " desligamento" operação para indicar que não serão adicionados mais itens. As necessidades e o uso de tais recursos tendem a depender da implementação. Por exemplo, uma tática comum é que os produtores insiram objetos especiais <em>end-of-stream</em> ou <em>poison</em> , que são interpretados de acordo quando tomados pelos consumidores.

Exemplo de uso, com base em um cenário típico produtor-consumidor. Observe que um BlockingQueue pode ser usado com segurança com vários produtores e vários 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();
              }
            }}

Efeitos de consistência de memória: Como acontece com outras coleções simultâneas, ações em um thread antes de colocar um objeto em um BlockingQueue<i>happen-before</i> ações subsequentes ao acesso ou remoção desse elemento do BlockingQueue em outro thread.

Essa interface é membro do Java Collections Framework.

Adicionado em 1.5.

Documentação Java para java.util.concurrent.BlockingQueue.

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.

Propriedades

Handle

Obtém o valor JNI do objeto Android subjacente.

(Herdado de IJavaObject)
IsEmpty

Retorna se isso Collection não contiver elementos .

(Herdado de ICollection)
JniIdentityHashCode

Retorna o valor de java.lang.System.identityHashCode() para a instância encapsulada.

(Herdado de IJavaPeerable)
JniManagedPeerState

Estado do par gerenciado.

(Herdado de IJavaPeerable)
JniPeerMembers

Acesso de membros e suporte à invocação.

(Herdado de IJavaPeerable)
PeerReference

Retorna uma JniObjectReference das instâncias do objeto Java encapsulado.

(Herdado de IJavaPeerable)

Métodos

Add(Object)

Insere o elemento especificado nessa fila se for possível fazê-lo imediatamente sem violar as restrições de capacidade, retornando true após o êxito e lançando um IllegalStateException se nenhum espaço estiver disponível no momento.

AddAll(ICollection)

Adiciona todos os elementos na coleção especificada a essa coleção (operação opcional).

(Herdado de ICollection)
Clear()

Remove todos os elementos desta coleção (operação opcional).

(Herdado de ICollection)
Contains(Object)

Retorna true se essa fila contiver o elemento especificado.

ContainsAll(ICollection)

Retorna true se essa coleção contiver todos os elementos na coleção especificada.

(Herdado de ICollection)
Disposed()

Chamado quando a instância tiver sido descartada.

(Herdado de IJavaPeerable)
DisposeUnlessReferenced()

Se não houver referências pendentes a este caso, então chame Dispose(), caso contrário, não faz nada.

(Herdado de IJavaPeerable)
DrainTo(ICollection)

Remove todos os elementos disponíveis dessa fila e os adiciona à coleção fornecida.

DrainTo(ICollection, Int32)

Remove no máximo o número determinado de elementos disponíveis dessa fila e os adiciona à coleção fornecida.

Element()

Recupera, mas não remove, o cabeçalho dessa fila.

(Herdado de IQueue)
Equals(Object)

Compara o objeto especificado com esta coleção para igualdade.

(Herdado de ICollection)
Finalized()

Chamado quando a instância tiver sido finalizada.

(Herdado de IJavaPeerable)
ForEach(IConsumer)

Executa a ação fornecida para cada elemento do Iterable até que todos os elementos tenham sido processados ou a ação lance uma exceção.

(Herdado de IIterable)
GetHashCode()

Retorna o valor do código hash para esta coleção.

(Herdado de ICollection)
Iterator()

Retorna um iterador sobre os elementos nesta coleção.

(Herdado de ICollection)
Offer(Object)

Insere o elemento especificado nessa fila se for possível fazê-lo imediatamente sem violar as restrições de capacidade, retornando true após o êxito e false se nenhum espaço estiver disponível no momento.

Offer(Object, Int64, TimeUnit)

Insere o elemento especificado nessa fila, aguardando até o tempo de espera especificado, se necessário, para que o espaço fique disponível.

Peek()

Recupera, mas não remove, o cabeçalho dessa fila ou retorna null se essa fila estiver vazia.

(Herdado de IQueue)
Poll()

Recupera e remove o cabeçalho dessa fila ou retorna null se essa fila estiver vazia.

(Herdado de IQueue)
Poll(Int64, TimeUnit)

Recupera e remove o cabeçalho dessa fila, aguardando até o tempo de espera especificado, se necessário, para que um elemento fique disponível.

Put(Object)

Insere o elemento especificado nessa fila, aguardando, se necessário, que o espaço fique disponível.

RemainingCapacity()

Retorna o número de elementos adicionais que essa fila pode idealmente (na ausência de restrições de memória ou recursos) aceitar sem bloqueio ou Integer.MAX_VALUE se não houver limite intrínseco.

Remove()

Recupera e remove o cabeçalho dessa fila.

(Herdado de IQueue)
Remove(Object)

Remove uma única instância do elemento especificado dessa fila, se ela estiver presente.

RemoveAll(ICollection)

Remove todos os elementos desta coleção que também estão contidos na coleção especificada (operação opcional).

(Herdado de ICollection)
RemoveIf(IPredicate)

Remove todos os elementos desta coleção que satisfazem o predicado fornecido.

(Herdado de ICollection)
RetainAll(ICollection)

Retém apenas os elementos nesta coleção que estão contidos na coleção especificada (operação opcional).

(Herdado de ICollection)
SetJniIdentityHashCode(Int32)

Defina o valor retornado por JniIdentityHashCode.

(Herdado de IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Um Queue que também oferece suporte a operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um elemento.

(Herdado de IJavaPeerable)
SetPeerReference(JniObjectReference)

Defina o valor retornado por PeerReference.

(Herdado de IJavaPeerable)
Size()

Retorna o número de elementos nesta coleção.

(Herdado de ICollection)
Spliterator()

Cria um Spliterator sobre os elementos descritos por este Iterable.

(Herdado de IIterable)
Take()

Recupera e remove o cabeçalho dessa fila, aguardando, se necessário, até que um elemento fique disponível.

ToArray()

Retorna uma matriz que contém todos os elementos desta coleção.

(Herdado de ICollection)
ToArray(IIntFunction)

Retorna uma matriz que contém todos os elementos nesta coleção, usando a função fornecida generator para alocar a matriz retornada.

(Herdado de ICollection)
ToArray(Object[])

Retorna uma matriz contendo todos os elementos nesta coleção; O tipo de tempo de execução da matriz retornada é o da matriz especificada.

(Herdado de ICollection)
UnregisterFromRuntime()

Cancele o registro dessa instância para que o tempo de execução não a retorne de chamadas futuras Java.Interop.JniRuntime+JniValueManager.PeekValue .

(Herdado de IJavaPeerable)

Implantações explícitas de interface

IIterable.Spliterator()

Cria um Spliterator sobre os elementos nesta coleção.

(Herdado de ICollection)

Métodos de Extensão

JavaCast<TResult>(IJavaObject)

Executa uma conversão de tipo verificada em tempo de execução do Android.

JavaCast<TResult>(IJavaObject)

Um Queue que também oferece suporte a operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um elemento.

GetJniTypeName(IJavaPeerable)

Um Queue que também oferece suporte a operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um elemento.

OfferAsync(IBlockingQueue, Object)

Um Queue que também oferece suporte a operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um elemento.

OfferAsync(IBlockingQueue, Object, Int64, TimeUnit)

Um Queue que também oferece suporte a operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um elemento.

PollAsync(IBlockingQueue, Int64, TimeUnit)

Um Queue que também oferece suporte a operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um elemento.

PutAsync(IBlockingQueue, Object)

Um Queue que também oferece suporte a operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um elemento.

TakeAsync(IBlockingQueue)

Um Queue que também oferece suporte a operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um elemento.

ToEnumerable(IIterable)

Um Queue que também oferece suporte a operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um elemento.

ToEnumerable<T>(IIterable)

Um Queue que também oferece suporte a operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um elemento.

Aplica-se a