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">캡션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
않습니다. 구현은 또는 offer
put
null
에 대한 시도를 throw NullPointerException
합니다.add
는 null
작업의 실패 poll
를 나타내기 위해 sentinel 값으로 사용됩니다.
은 BlockingQueue
용량이 제한될 수 있습니다. 언제든지 차단 없이는 추가 요소가 없을 수 있는 이상의 가 있을 put
수 remainingCapacity
있습니다. BlockingQueue
내장 용량 제약 조건이 없는 은 항상 의 나머지 용량Integer.MAX_VALUE
을 보고합니다.
BlockingQueue
구현은 주로 생산자-소비자 큐에 사용되도록 설계되었지만 인터페이스를 추가로 지원 Collection
합니다. 예를 들어 를 사용하여 큐에서 임의의 요소를 제거할 수 있습니다 remove(x)
. 그러나 이러한 작업은 일반적으로 <>매우 효율적으로 수행되지 않으며<> 큐에 대기 중인 메시지가 취소되는 경우와 같이 가끔만 사용하기 위한 것입니다.
BlockingQueue
구현은 스레드로부터 안전합니다. 모든 큐 메서드는 내부 잠금 또는 다른 형태의 동시성 제어를 사용하여 원자성 효과를 달성합니다. 그러나 em bulk/em> 컬렉션 작업 addAll
, containsAll
retainAll
및 removeAll
는>< 구현에서 달리 지정하지 않는 한 반드시 원자성으로 수행되지 않습니다><.<>< 예를 들어 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 |
요소가 없으면 |
JniIdentityHashCode |
래핑된 instance 값을 반환 |
JniManagedPeerState |
관리되는 피어의 상태입니다. (다음에서 상속됨 IJavaPeerable) |
JniPeerMembers |
멤버 액세스 및 호출 지원. (다음에서 상속됨 IJavaPeerable) |
PeerReference |
JniObjectReference 래핑된 Java 개체 instance 의 를 반환합니다. (다음에서 상속됨 IJavaPeerable) |
메서드
Add(Object) |
용량 제한을 위반하지 않고 즉시 수행할 수 있는 경우 지정된 요소를 이 큐에 삽입하고 |
AddAll(ICollection) |
지정된 컬렉션의 모든 요소를 이 컬렉션에 추가합니다(선택적 작업). (다음에서 상속됨 ICollection) |
Clear() |
이 컬렉션에서 모든 요소를 제거합니다(선택적 작업). (다음에서 상속됨 ICollection) |
Contains(Object) |
이 큐에 지정된 요소가 포함되어 있으면 를 반환 |
ContainsAll(ICollection) |
이 컬렉션에 지정된 컬렉션의 모든 요소가 포함되어 있으면 를 반환 |
Disposed() |
instance 삭제될 때 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
DisposeUnlessReferenced() |
이 instance 대한 미해결 참조가 없으면 를 호출 |
DrainTo(ICollection) |
이 큐에서 사용 가능한 모든 요소를 제거하고 지정된 컬렉션에 추가합니다. |
DrainTo(ICollection, Int32) |
이 큐에서 사용 가능한 최대 개수의 요소를 제거하고 지정된 컬렉션에 추가합니다. |
Element() |
이 큐의 헤드를 검색하지만 제거하지는 않습니다. (다음에서 상속됨 IQueue) |
Equals(Object) |
지정된 개체를 이 컬렉션과 같음으로 비교합니다. (다음에서 상속됨 ICollection) |
Finalized() |
instance 완료될 때 호출됩니다. (다음에서 상속됨 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) |
지정된 요소의 단일 instance 이 큐에서 제거합니다(있는 경우). |
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 호출에서 반환되지 않도록 이 instance 등록을 취소합니다. (다음에서 상속됨 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) |
|