다음을 통해 공유


IBlockingQueue 인터페이스

정의

Queue 또한 요소를 검색할 때 큐가 비어있지 않은 상태가 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

[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
파생
특성
구현

설명

Queue 또한 요소를 검색할 때 큐가 비어있지 않은 상태가 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

BlockingQueue 메서드는 즉시 충족할 수 없지만 향후 특정 시점에 충족될 수 있는 작업을 처리하는 다양한 방법으로 네 가지 형식으로 제공됩니다. 하나는 예외를 throw하고, 두 번째는 작업에 따라 특수 값(또는 nullfalse작업에 따라)을 반환하고, 세 번째 메서드는 작업이 성공할 때까지 현재 스레드를 무기한 차단하고, 네 번째 블록은 포기하기 전에 지정된 최대 시간 제한에 대해서만 차단합니다. 이러한 메서드는 다음 표에 요약되어 있습니다.

<table class="plain">caption Summary of BlockingQueue methods</caption><tr><td></td><th scope="col" style="font-weight:normal; font-style:italic">Throw 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><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)/tr<> tr<>tr<>th scope="row" style="text-align:left">Remove</th<>td#remove() remove()<>/td td<>/td>#poll() poll()</tdtd>#take() take()</td td>#poll(long, TimeUnit) poll(time, unit)><</td></tr 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 는 요소를 허용하지 null 않습니다. 구현은 시도addoffernullthrow NullPointerException 또는 put . A null 는 작업의 실패 poll 를 나타내기 위해 sentinel 값으로 사용됩니다.

A는 BlockingQueue 용량에 제한될 수 있습니다. 언제든지 차단 없이는 추가 요소가 없을 수 remainingCapacity 있는 그 이상의 요소가 있을 put 수 있습니다. 내장 용량 제약 조건이 없는 A BlockingQueue 는 항상 나머지 용량 Integer.MAX_VALUE을 보고합니다.

BlockingQueue 구현은 주로 생산자-소비자 큐에 사용되도록 설계되었지만 인터페이스를 추가로 지원 Collection 합니다. 따라서 예를 들어 .를 사용하여 큐에서 임의의 요소를 제거할 수 있습니다 remove(x). 그러나 이러한 작업은 일반적으로 <>매우 효율적으로 수행되지 않으며<> 대기 중인 메시지가 취소되는 경우와 같이 가끔만 사용하기 위한 것입니다.

BlockingQueue 구현은 스레드로부터 안전합니다. 모든 큐 메서드는 내부 잠금 또는 다른 형태의 동시성 제어를 사용하여 원자성 효과를 얻을 수 있습니다. 그러나 em bulk/em> 컬렉션 작업은 retainAll<>removeAlladdAllcontainsAll구현에서 달리 지정하지 않는 한 반드시 원자성으로 수행되지 않습니다.<><>< 따라서 예를 들어 addAll(c) 일부 요소만 추가한 후 실패(예외 throw)할 수 있습니다 c.

A BlockingQueue 는 모든 종류의 "을 기본적으로 지원하지 않습니다><><. close" 또는 따옴표로 묶인 경우 shutdown" 작업을 수행하여 더 이상 항목이 추가되지 않음을 나타냅니다. 이러한 기능의 요구 사항과 사용은 구현에 따라 달라지는 경향이 있습니다. 예를 들어, 일반적인 전술은 생산자가 소비자가 사용할 때 적절하게 해석되는 특수 em 스트림 끝/em> 또는 <em>포이즌</em> 개체를 삽입하는 것입니다.<><

일반적인 생산자-소비자 시나리오를 기반으로 하는 사용 예제입니다. 여러 BlockingQueue 생산자 및 여러 소비자와 함께 안전하게 사용할 수 있습니다.

{@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();
              }
            }}

메모리 일관성 효과: 다른 동시 컬렉션과 마찬가지로 다른 스레드에서 해당 요소의 액세스 또는 제거 이후 i에 개체BlockingQueue<>를 배치하기 전에< 스레드의 작업이 수행됩니다>.BlockingQueue

이 인터페이스는 Java 컬렉션 프레임워크 멤버입니다.

1.5에 추가되었습니다.

에 대한 java.util.concurrent.BlockingQueueJava 설명서

이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.

속성

Handle

기본 Android 개체의 JNI 값을 가져옵니다.

(다음에서 상속됨 IJavaObject)
IsEmpty

요소가 없는 경우 Collection 반환합니다.

(다음에서 상속됨 ICollection)
JniIdentityHashCode

래핑된 인스턴스의 java.lang.System.identityHashCode() 값을 반환합니다.

(다음에서 상속됨 IJavaPeerable)
JniManagedPeerState

관리되는 피어의 상태입니다.

(다음에서 상속됨 IJavaPeerable)
JniPeerMembers

멤버 액세스 및 호출 지원.

(다음에서 상속됨 IJavaPeerable)
PeerReference

JniObjectReference 래핑된 Java 개체 인스턴스의 값을 반환합니다.

(다음에서 상속됨 IJavaPeerable)

메서드

Add(Object)

용량 제한을 위반하지 않고 즉시 수행할 수 있는 경우 지정된 요소를 이 큐에 삽입하고 true , 성공 시 반환하고, 현재 사용할 수 있는 IllegalStateException 공간이 없는 경우 throw합니다.

AddAll(ICollection)

지정된 컬렉션의 모든 요소를 이 컬렉션에 추가합니다(선택적 작업).

(다음에서 상속됨 ICollection)
Clear()

이 컬렉션에서 모든 요소를 제거합니다(선택적 작업).

(다음에서 상속됨 ICollection)
Contains(Object)

이 큐에 지정된 요소가 포함되어 있는지를 반환 true 합니다.

ContainsAll(ICollection)

이 컬렉션에 지정된 컬렉션의 모든 요소가 포함되어 있는지를 반환 true 합니다.

(다음에서 상속됨 ICollection)
Disposed()

인스턴스가 삭제되었을 때 호출됩니다.

(다음에서 상속됨 IJavaPeerable)
DisposeUnlessReferenced()

이 인스턴스에 대한 미해결 참조가 없으면 호출 Dispose()합니다. 그렇지 않으면 아무 작업도 수행하지 않습니다.

(다음에서 상속됨 IJavaPeerable)
DrainTo(ICollection)

이 큐에서 사용 가능한 모든 요소를 제거하고 지정된 컬렉션에 추가합니다.

DrainTo(ICollection, Int32)

이 큐에서 사용 가능한 요소의 최대 수를 제거하고 지정된 컬렉션에 추가합니다.

Element()

이 큐의 헤드를 검색하지만 제거하지는 않습니다.

(다음에서 상속됨 IQueue)
Equals(Object)

지정된 개체를 이 컬렉션과 비교하여 같은지 확인합니다.

(다음에서 상속됨 ICollection)
Finalized()

인스턴스가 종료될 때 호출됩니다.

(다음에서 상속됨 IJavaPeerable)
ForEach(IConsumer)

모든 요소가 처리되거나 작업이 예외를 Iterable throw할 때까지 각 요소에 대해 지정된 작업을 수행합니다.

(다음에서 상속됨 IIterable)
GetHashCode()

이 컬렉션의 해시 코드 값을 반환합니다.

(다음에서 상속됨 ICollection)
Iterator()

이 컬렉션의 요소에 대한 반복기를 반환합니다.

(다음에서 상속됨 ICollection)
Offer(Object)

용량 제한을 위반하지 않고 즉시 수행할 수 있는 경우 지정된 요소를 이 큐에 삽입하고 true 성공 시 반환하며 false 현재 사용할 수 있는 공간이 없는 경우 삽입합니다.

Offer(Object, Int64, TimeUnit)

공백을 사용할 수 있도록 필요한 경우 지정된 대기 시간까지 대기하여 지정된 요소를 이 큐에 삽입합니다.

Peek()

이 큐의 헤드를 검색하지만 제거하지는 않으며 이 큐가 비어 있으면 반환합니다 null .

(다음에서 상속됨 IQueue)
Poll()

이 큐의 헤드를 검색하고 제거하거나 이 큐가 비어 있으면 반환합니다 null .

(다음에서 상속됨 IQueue)
Poll(Int64, TimeUnit)

요소를 사용할 수 있도록 필요한 경우 지정된 대기 시간까지 대기하여 이 큐의 헤드를 검색하고 제거합니다.

Put(Object)

공간이 사용 가능해질 때까지 필요한 경우 대기하여 지정된 요소를 이 큐에 삽입합니다.

RemainingCapacity()

메모리 Integer.MAX_VALUE 또는 리소스 제약 조건이 없는 경우 또는 기본 제한이 없는 경우 이 큐에서 허용할 수 있는 추가 요소의 수를 반환합니다.

Remove()

이 큐의 헤드를 검색하고 제거합니다.

(다음에서 상속됨 IQueue)
Remove(Object)

지정된 요소의 단일 인스턴스가 있는 경우 이 큐에서 제거합니다.

RemoveAll(ICollection)

지정된 컬렉션에도 포함된 이 컬렉션의 모든 요소를 제거합니다(선택적 작업).

(다음에서 상속됨 ICollection)
RemoveIf(IPredicate)

지정된 조건자를 충족하는 이 컬렉션의 모든 요소를 제거합니다.

(다음에서 상속됨 ICollection)
RetainAll(ICollection)

지정된 컬렉션에 포함된 이 컬렉션의 요소만 유지합니다(선택적 작업).

(다음에서 상속됨 ICollection)
SetJniIdentityHashCode(Int32)

에서 반환 JniIdentityHashCode하는 값을 설정합니다.

(다음에서 상속됨 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Queue 또한 요소를 검색할 때 큐가 비어있지 않은 상태가 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

(다음에서 상속됨 IJavaPeerable)
SetPeerReference(JniObjectReference)

에서 반환 PeerReference하는 값을 설정합니다.

(다음에서 상속됨 IJavaPeerable)
Size()

이 컬렉션의 요소 수를 반환합니다.

(다음에서 상속됨 ICollection)
Spliterator()

Spliterator 에서 Iterable설명하는 요소 위에 대해 만듭니다.

(다음에서 상속됨 IIterable)
Take()

필요한 경우 요소를 사용할 수 있게 될 때까지 기다리며 이 큐의 헤드를 검색하고 제거합니다.

ToArray()

이 컬렉션의 모든 요소를 포함하는 배열을 반환합니다.

(다음에서 상속됨 ICollection)
ToArray(IIntFunction)

제공된 함수를 사용하여 반환된 generator 배열을 할당하여 이 컬렉션의 모든 요소가 포함된 배열을 반환합니다.

(다음에서 상속됨 ICollection)
ToArray(Object[])

이 컬렉션의 모든 요소를 포함하는 배열을 반환합니다. 반환된 배열의 런타임 형식은 지정된 배열의 런타임 형식입니다.

(다음에서 상속됨 ICollection)
UnregisterFromRuntime()

런타임이 이후 Java.Interop.JniRuntime+JniValueManager.PeekValue 호출에서 반환되지 않도록 이 인스턴스의 등록을 취소합니다.

(다음에서 상속됨 IJavaPeerable)

명시적 인터페이스 구현

IIterable.Spliterator()

이 컬렉션의 Spliterator 요소 위에 대해 만듭니다.

(다음에서 상속됨 ICollection)

확장 메서드

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

Queue 또한 요소를 검색할 때 큐가 비어있지 않은 상태가 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

GetJniTypeName(IJavaPeerable)

Queue 또한 요소를 검색할 때 큐가 비어있지 않은 상태가 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

OfferAsync(IBlockingQueue, Object)

Queue 또한 요소를 검색할 때 큐가 비어있지 않은 상태가 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

OfferAsync(IBlockingQueue, Object, Int64, TimeUnit)

Queue 또한 요소를 검색할 때 큐가 비어있지 않은 상태가 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

PollAsync(IBlockingQueue, Int64, TimeUnit)

Queue 또한 요소를 검색할 때 큐가 비어있지 않은 상태가 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

PutAsync(IBlockingQueue, Object)

Queue 또한 요소를 검색할 때 큐가 비어있지 않은 상태가 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

TakeAsync(IBlockingQueue)

Queue 또한 요소를 검색할 때 큐가 비어있지 않은 상태가 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

ToEnumerable(IIterable)

Queue 또한 요소를 검색할 때 큐가 비어있지 않은 상태가 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

ToEnumerable<T>(IIterable)

Queue 또한 요소를 검색할 때 큐가 비어있지 않은 상태가 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

적용 대상