IBlockingQueue Interface
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 null
false
, 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 null
arquivo . 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> , retainAll
containsAll
e removeAll
são <em>não</em> necessariamente executadas atomicamente, a menos que especificado de outra forma em uma addAll
implementaçã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 |
JniIdentityHashCode |
Retorna o valor de |
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 |
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 |
ContainsAll(ICollection) |
Retorna |
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 |
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 |
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 |
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 |
Poll() |
Recupera e remove o cabeçalho dessa fila ou retorna |
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 |
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 |
SetJniManagedPeerState(JniManagedPeerStates) |
Um |
SetPeerReference(JniObjectReference) |
Defina o valor retornado por |
Size() |
Retorna o número de elementos nesta coleção. (Herdado de ICollection) |
Spliterator() |
Cria um |
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 |
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 |
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 |
GetJniTypeName(IJavaPeerable) |
Um |
OfferAsync(IBlockingQueue, Object) |
Um |
OfferAsync(IBlockingQueue, Object, Int64, TimeUnit) |
Um |
PollAsync(IBlockingQueue, Int64, TimeUnit) |
Um |
PutAsync(IBlockingQueue, Object) |
Um |
TakeAsync(IBlockingQueue) |
Um |
ToEnumerable(IIterable) |
Um |
ToEnumerable<T>(IIterable) |
Um |