Share via


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하고, 두 번째 메서드는 작업에 따라 특수 값( null 또는 false)을 반환하고, 세 번째 메서드는 작업이 성공할 때까지 현재 스레드를 무기한 차단하고, 포기하기 전에 지정된 최대 시간 제한에 대해서만 네 번째 블록을 차단합니다. 이러한 메서드는 다음 표에 요약되어 있습니다.

<table class="plain">캡션Summary of BlockingQueue 메서드</캡션><tr><td/td<>>< th scope="col" style="font-weight:normal; font-style:italic">throws 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)<><<>#offer(Object, long, TimeUnit) offer(e, time, unit)</<>tr><trth 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)<>/tr<> tr tr><><th scope="row" style="text-align:left">Examine</th<>td/td<#element() element()> td></td td>#peek() peek()< td<>>< style="font-style: 기울임꼴">not applicable</td td<>style="font-style: italic">not applicable</td></tr></table>

BlockingQueue 요소를 허용하지 null 않습니다. 구현은 또는 offerputnull에 대한 시도를 throw NullPointerException 합니다.addnull 작업의 실패 poll 를 나타내기 위해 sentinel 값으로 사용됩니다.

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

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

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

BlockingQueue 모든 종류의 &기본적으로 지원하지 않습니다><><. 닫기&따옴표; 또는 &따옴표; 종료&따옴표; 더 이상 항목이 추가되지 않음을 나타내는 작업입니다. 이러한 기능의 요구 사항 및 사용은 구현에 종속되는 경향이 있습니다. 예를 들어 생산자가 특수 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();
              }
            }}

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

이 인터페이스는 Java Collections Framework의 멤버입니다.

1.5에 추가되었습니다.

에 대한 Java 설명서입니다 java.util.concurrent.BlockingQueue.

이 페이지의 일부는 만들고 공유하며 에 설명된 조건에 따라 사용되는 작업을 기반으로 수정됩니다.

속성

Handle

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

(다음에서 상속됨 IJavaObject)
IsEmpty

요소가 없으면 Collection 를 반환합니다.

(다음에서 상속됨 ICollection)
JniIdentityHashCode

래핑된 instance 값을 반환 java.lang.System.identityHashCode() 합니다.

(다음에서 상속됨 IJavaPeerable)
JniManagedPeerState

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

(다음에서 상속됨 IJavaPeerable)
JniPeerMembers

멤버 액세스 및 호출 지원.

(다음에서 상속됨 IJavaPeerable)
PeerReference

JniObjectReference 래핑된 Java 개체 instance 의 를 반환합니다.

(다음에서 상속됨 IJavaPeerable)

메서드

Add(Object)

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

AddAll(ICollection)

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

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

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

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

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

ContainsAll(ICollection)

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

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

instance 삭제될 때 호출됩니다.

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

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

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

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

DrainTo(ICollection, Int32)

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

Element()

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

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

지정된 개체를 이 컬렉션과 같음으로 비교합니다.

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

instance 완료될 때 호출됩니다.

(다음에서 상속됨 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)

지정된 요소의 단일 instance 이 큐에서 제거합니다(있는 경우).

RemoveAll(ICollection)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ToArray()

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

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

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

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

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

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

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

(다음에서 상속됨 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 요소를 검색할 때 큐가 비어 있지 않은 상태로 될 때까지 대기하고 요소를 저장할 때 큐에서 공간을 사용할 수 있을 때까지 기다리는 작업을 추가로 지원하는 입니다.

적용 대상