IBlockingQueue 인터페이스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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">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
않습니다. 구현은 시도add
에 offer
null
throw NullPointerException
또는 put
. A null
는 작업의 실패 poll
를 나타내기 위해 sentinel 값으로 사용됩니다.
A는 BlockingQueue
용량에 제한될 수 있습니다. 언제든지 차단 없이는 추가 요소가 없을 수 remainingCapacity
있는 그 이상의 요소가 있을 put
수 있습니다. 내장 용량 제약 조건이 없는 A BlockingQueue
는 항상 나머지 용량 Integer.MAX_VALUE
을 보고합니다.
BlockingQueue
구현은 주로 생산자-소비자 큐에 사용되도록 설계되었지만 인터페이스를 추가로 지원 Collection
합니다. 따라서 예를 들어 .를 사용하여 큐에서 임의의 요소를 제거할 수 있습니다 remove(x)
. 그러나 이러한 작업은 일반적으로 <>매우 효율적으로 수행되지 않으며<> 대기 중인 메시지가 취소되는 경우와 같이 가끔만 사용하기 위한 것입니다.
BlockingQueue
구현은 스레드로부터 안전합니다. 모든 큐 메서드는 내부 잠금 또는 다른 형태의 동시성 제어를 사용하여 원자성 효과를 얻을 수 있습니다. 그러나 em bulk/em> 컬렉션 작업은 retainAll
<>removeAll
addAll
containsAll
구현에서 달리 지정하지 않는 한 반드시 원자성으로 수행되지 않습니다.<><>< 따라서 예를 들어 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.BlockingQueue
Java 설명서
이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.
속성
Handle |
기본 Android 개체의 JNI 값을 가져옵니다. (다음에서 상속됨 IJavaObject) |
IsEmpty |
요소가 없는 경우 |
JniIdentityHashCode |
래핑된 인스턴스의 |
JniManagedPeerState |
관리되는 피어의 상태입니다. (다음에서 상속됨 IJavaPeerable) |
JniPeerMembers |
멤버 액세스 및 호출 지원. (다음에서 상속됨 IJavaPeerable) |
PeerReference |
JniObjectReference 래핑된 Java 개체 인스턴스의 값을 반환합니다. (다음에서 상속됨 IJavaPeerable) |
메서드
Add(Object) |
용량 제한을 위반하지 않고 즉시 수행할 수 있는 경우 지정된 요소를 이 큐에 삽입하고 |
AddAll(ICollection) |
지정된 컬렉션의 모든 요소를 이 컬렉션에 추가합니다(선택적 작업). (다음에서 상속됨 ICollection) |
Clear() |
이 컬렉션에서 모든 요소를 제거합니다(선택적 작업). (다음에서 상속됨 ICollection) |
Contains(Object) |
이 큐에 지정된 요소가 포함되어 있는지를 반환 |
ContainsAll(ICollection) |
이 컬렉션에 지정된 컬렉션의 모든 요소가 포함되어 있는지를 반환 |
Disposed() |
인스턴스가 삭제되었을 때 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
DisposeUnlessReferenced() |
이 인스턴스에 대한 미해결 참조가 없으면 호출 |
DrainTo(ICollection) |
이 큐에서 사용 가능한 모든 요소를 제거하고 지정된 컬렉션에 추가합니다. |
DrainTo(ICollection, Int32) |
이 큐에서 사용 가능한 요소의 최대 수를 제거하고 지정된 컬렉션에 추가합니다. |
Element() |
이 큐의 헤드를 검색하지만 제거하지는 않습니다. (다음에서 상속됨 IQueue) |
Equals(Object) |
지정된 개체를 이 컬렉션과 비교하여 같은지 확인합니다. (다음에서 상속됨 ICollection) |
Finalized() |
인스턴스가 종료될 때 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
ForEach(IConsumer) |
모든 요소가 처리되거나 작업이 예외를 |
GetHashCode() |
이 컬렉션의 해시 코드 값을 반환합니다. (다음에서 상속됨 ICollection) |
Iterator() |
이 컬렉션의 요소에 대한 반복기를 반환합니다. (다음에서 상속됨 ICollection) |
Offer(Object) |
용량 제한을 위반하지 않고 즉시 수행할 수 있는 경우 지정된 요소를 이 큐에 삽입하고 |
Offer(Object, Int64, TimeUnit) |
공백을 사용할 수 있도록 필요한 경우 지정된 대기 시간까지 대기하여 지정된 요소를 이 큐에 삽입합니다. |
Peek() |
이 큐의 헤드를 검색하지만 제거하지는 않으며 이 큐가 비어 있으면 반환합니다 |
Poll() |
이 큐의 헤드를 검색하고 제거하거나 이 큐가 비어 있으면 반환합니다 |
Poll(Int64, TimeUnit) |
요소를 사용할 수 있도록 필요한 경우 지정된 대기 시간까지 대기하여 이 큐의 헤드를 검색하고 제거합니다. |
Put(Object) |
공간이 사용 가능해질 때까지 필요한 경우 대기하여 지정된 요소를 이 큐에 삽입합니다. |
RemainingCapacity() |
메모리 |
Remove() |
이 큐의 헤드를 검색하고 제거합니다. (다음에서 상속됨 IQueue) |
Remove(Object) |
지정된 요소의 단일 인스턴스가 있는 경우 이 큐에서 제거합니다. |
RemoveAll(ICollection) |
지정된 컬렉션에도 포함된 이 컬렉션의 모든 요소를 제거합니다(선택적 작업). (다음에서 상속됨 ICollection) |
RemoveIf(IPredicate) |
지정된 조건자를 충족하는 이 컬렉션의 모든 요소를 제거합니다. (다음에서 상속됨 ICollection) |
RetainAll(ICollection) |
지정된 컬렉션에 포함된 이 컬렉션의 요소만 유지합니다(선택적 작업). (다음에서 상속됨 ICollection) |
SetJniIdentityHashCode(Int32) |
에서 반환 |
SetJniManagedPeerState(JniManagedPeerStates) |
|
SetPeerReference(JniObjectReference) |
에서 반환 |
Size() |
이 컬렉션의 요소 수를 반환합니다. (다음에서 상속됨 ICollection) |
Spliterator() |
|
Take() |
필요한 경우 요소를 사용할 수 있게 될 때까지 기다리며 이 큐의 헤드를 검색하고 제거합니다. |
ToArray() |
이 컬렉션의 모든 요소를 포함하는 배열을 반환합니다. (다음에서 상속됨 ICollection) |
ToArray(IIntFunction) |
제공된 함수를 사용하여 반환된 |
ToArray(Object[]) |
이 컬렉션의 모든 요소를 포함하는 배열을 반환합니다. 반환된 배열의 런타임 형식은 지정된 배열의 런타임 형식입니다. (다음에서 상속됨 ICollection) |
UnregisterFromRuntime() |
런타임이 이후 Java.Interop.JniRuntime+JniValueManager.PeekValue 호출에서 반환되지 않도록 이 인스턴스의 등록을 취소합니다. (다음에서 상속됨 IJavaPeerable) |
명시적 인터페이스 구현
IIterable.Spliterator() |
이 컬렉션의 |
확장 메서드
JavaCast<TResult>(IJavaObject) |
Android 런타임 확인 형식 변환을 수행합니다. |
JavaCast<TResult>(IJavaObject) |
|
GetJniTypeName(IJavaPeerable) |
|
OfferAsync(IBlockingQueue, Object) |
|
OfferAsync(IBlockingQueue, Object, Int64, TimeUnit) |
|
PollAsync(IBlockingQueue, Int64, TimeUnit) |
|
PutAsync(IBlockingQueue, Object) |
|
TakeAsync(IBlockingQueue) |
|
ToEnumerable(IIterable) |
|
ToEnumerable<T>(IIterable) |
|