JavaTM Platform
Standard Ed. 6

java.util.concurrent
클래스 SynchronousQueue<E>

java.lang.Object 
  상위를 확장 java.util.AbstractCollection <E>
      상위를 확장 java.util.AbstractQueue <E>
          상위를 확장 java.util.concurrent.SynchronousQueue<E>
형태 파라미터:
E - 컬렉션내에 존재하는 요소의 형태
모든 구현된 인터페이스:
Serializable , Iterable <E>, Collection <E>, BlockingQueue <E>, Queue <E>


public class SynchronousQueue<E>
extends AbstractQueue <E>
implements BlockingQueue <E>, Serializable

각 삽입 오퍼레이션이 다른 thread에 의한 대응하는 삭제 오퍼레이션을 대기할 필요가 있는 ( 및 그 역의) 블로킹 큐 입니다. 동기 큐에는, 내부 용량이 전혀 없습니다. 요소가 존재하는 것은 삭제하려고 할 때 만이므로, 동기 큐로 peek 를 실행할 수 없습니다. 다른 thread가 삭제를 시도하지 않은 한, 어느 메소드를 사용해도 요소를 삽입할 수 없습니다. 반복하는 것이 존재하지 않기 때문에, 반복은 실행할 수 없습니다. 큐의 「선두」는, 삽입 처리 thread가 큐에 추가하려고 한다, 최초로 큐에 넣어진 요소입니다. 그러한 큐에 넣어진 thread가 존재하지 않는 경우는, 삭제할 수 있는 요소는 없고,poll()null 를 돌려줍니다. 다른 Collection 메소드 (contains 등)를 위해서(때문에),SynchronousQueue 는 빈 상태(empty)의 컬렉션으로서 동작합니다. 이 큐에서는,null 요소는 허가되지 않습니다.

동기 큐는, CSP 및 Ada 로 사용되는 랑데뷰 채널을 닮아 있습니다. 이것들은 핸드 오프 설계에 최적입니다. 핸드 오프 설계에서는, 정보, 이벤트, 또는 태스크를 건네주기 위해서(때문에), 어느 thread로 실행중의 객체를 다른 thread로 실행중의 객체와 동기 시킬 필요가 있습니다.

이 클래스에서는, 대기중의 프로듀서 및 컨슈머(consumer) thread의 순서부를 위한 옵션의 공평성 정책를 지원합니다. 디폴트에서는, 이 순서부는 보증되고 있지 않습니다. 다만, 공평성을 true 로 설정해 구축된 큐에서는, thread가 FIFO 의 순서로 액세스 하는 것이 허가됩니다.

이 클래스와 그 반복자는,CollectionIterator 인터페이스의 「옵션」메소드 모든 것을 구현합니다.

이 클래스는,Java Collections Framework 의 멤버입니다.

도입된 버젼:
1.5
관련 항목:
직렬화 된 형식

생성자 의 개요
SynchronousQueue ()
          불공평 액세스 정책로 SynchronousQueue 를 작성합니다.
SynchronousQueue (boolean fair)
          지정된 공평성 정책로 SynchronousQueue 를 작성합니다.
 
메소드의 개요
 void clear ()
          아무것도 실시하지 않습니다.
 boolean contains (Object  o)
          항상 false 를 돌려줍니다.
 boolean containsAll (Collection <? > c)
          지정된 컬렉션이 빈 상태(empty)이 아닌 한,false 를 돌려줍니다.
 int drainTo (Collection <? super E > c)
          이 큐로부터 이용 가능한 모든 요소를 삭제해, 그것들이 지정된 컬렉션에 추가합니다.
 int drainTo (Collection <? super E > c, int maxElements)
          지정된 수이내의 이용 가능한 요소를 이 큐로부터 삭제해, 지정된 컬렉션에 추가합니다.
 boolean isEmpty ()
          항상 true 를 돌려줍니다.
 Iterator <E > iterator ()
          항상 hasNextfalse 를 돌려주는 빈 상태(empty)의 반복자를 돌려줍니다.
 boolean offer (E  e)
          다른 thread가 요소를 받는 것을 대기하고 있는 경우, 그 요소를 이 큐에 추가합니다.
 boolean offer (E  o, long timeout, TimeUnit  unit)
          지정된 요소를 이 큐에 삽입합니다.
 E peek ()
          항상 null 를 돌려줍니다.
 E poll ()
          다른 thread가 현재 요소를 이용 가능하게 하고 있는 경우는, 큐의 선두를 취득해 삭제합니다.
 E poll (long timeout, TimeUnit  unit)
          이 큐의 선두를 취득 및 삭제합니다.
 void put (E  o)
          지정된 요소를 이 큐에 추가합니다.
 int remainingCapacity ()
          항상 제로를 돌려줍니다.
 boolean remove (Object  o)
          항상 false 를 돌려줍니다.
 boolean removeAll (Collection <? > c)
          항상 false 를 돌려줍니다.
 boolean retainAll (Collection <? > c)
          항상 false 를 돌려줍니다.
 int size ()
          항상 제로를 돌려줍니다.
 E take ()
          이 큐의 선두를 취득해 삭제합니다.
 Object [] toArray ()
          길이가 제로의 배열을 돌려줍니다.
<T> T[]
toArray (T[] a)
          배열의 길이가 제로가 아닌 경우에, 지정된 배열의 제로 번째의 요소를 null 로 설정해 돌려줍니다.
 
클래스 java.util. AbstractQueue 로부터 상속된 메소드
add , addAll , element , remove
 
클래스 java.util. AbstractCollection 로부터 상속된 메소드
toString
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , wait , wait , wait
 
인터페이스 java.util.concurrent. BlockingQueue 로부터 상속된 메소드
add
 
인터페이스 java.util. Queue 로부터 상속된 메소드
element , remove
 
인터페이스 java.util. Collection 로부터 상속된 메소드
addAll , equals , hashCode
 

생성자 의 상세

SynchronousQueue

public SynchronousQueue()
불공평 액세스 정책로 SynchronousQueue 를 작성합니다.


SynchronousQueue

public SynchronousQueue(boolean fair)
지정된 공평성 정책로 SynchronousQueue 를 작성합니다.

파라미터:
fair - true 의 경우, 대기중의 thread는 FIFO 의 순서로 액세스가 결정된다. 그렇지 않은 경우, 순서는 미지정
메소드의 상세

put

public void put(E  o)
         throws InterruptedException 
지정된 요소를 이 큐에 추가합니다. 필요에 따라서, 다른 thread가 요소를 받을 때까지 대기합니다.

정의:
인터페이스 BlockingQueue <E > 내의 put
파라미터:
o - 추가하는 요소
예외:
InterruptedException - 대기중에 인터럽트가 발생했을 경우
NullPointerException - 지정된 요소가 null 인 경우

offer

public boolean offer(E  o,
                     long timeout,
                     TimeUnit  unit)
              throws InterruptedException 
지정된 요소를 이 큐에 삽입합니다. 필요에 따라서, 지정된 대기 시간까지 다른 thread가 요소를 받는 것을 대기합니다.

정의:
인터페이스 BlockingQueue <E > 내의 offer
파라미터:
o - 추가하는 요소
timeout - 처리를 중지할 때까지의 대기 시간. 단위는 unit
unit - timeout 파라미터의 해석 방법을 결정하는 TimeUnit
반환값:
성공했을 경우는 true, 컨슈머(consumer)가 출현하기 전으로 지정된 대기 시간이 경과했을 경우는 false
예외:
InterruptedException - 대기중에 인터럽트가 발생했을 경우
NullPointerException - 지정된 요소가 null 인 경우

offer

public boolean offer(E  e)
다른 thread가 요소를 받는 것을 대기하고 있는 경우, 그 요소를 이 큐에 추가합니다.

정의:
인터페이스 BlockingQueue <E > 내의 offer
정의:
인터페이스 Queue <E > 내의 offer
파라미터:
e - 추가하는 요소
반환값:
이 큐에 요소가 추가되었을 경우는 true, 그 이외의 경우는 false
예외:
NullPointerException - 지정된 요소가 null 인 경우

take

public E  take()
       throws InterruptedException 
이 큐의 선두를 취득해 삭제합니다. 필요에 따라서, 다른 thread가 그 요소를 삽입할 때까지 대기합니다.

정의:
인터페이스 BlockingQueue <E > 내의 take
반환값:
큐의 선두
예외:
InterruptedException - 대기중에 인터럽트가 발생했을 경우

poll

public E  poll(long timeout,
              TimeUnit  unit)
       throws InterruptedException 
이 큐의 선두를 취득 및 삭제합니다. 필요에 따라서, 지정된 대기 시간까지 다른 thread가 그 요소를 삽입하는 것을 대기합니다.

정의:
인터페이스 BlockingQueue <E > 내의 poll
파라미터:
timeout - 처리를 중지할 때까지의 대기 시간. 단위는 unit
unit - timeout 파라미터의 해석 방법을 결정하는 TimeUnit
반환값:
이 큐의 선두. 요소가 존재하기 전으로 지정된 대기 시간이 경과했을 경우는 null
예외:
InterruptedException - 대기중에 인터럽트가 발생했을 경우

poll

public E  poll()
다른 thread가 현재 요소를 이용 가능하게 하고 있는 경우는, 큐의 선두를 취득해 삭제합니다.

정의:
인터페이스 Queue <E > 내의 poll
반환값:
큐의 선두. 요소가 이용 불가능한 경우는 null

isEmpty

public boolean isEmpty()
항상 true 를 돌려줍니다. SynchronousQueue 에는 내부 용량이 없습니다.

정의:
인터페이스 Collection <E > 내의 isEmpty
오버라이드(override):
클래스 AbstractCollection <E > 내의 isEmpty
반환값:
true

size

public int size()
항상 제로를 돌려줍니다. SynchronousQueue 에는 내부 용량이 없습니다.

정의:
인터페이스 Collection <E > 내의 size
정의:
클래스 AbstractCollection <E > 내의 size
반환값:
제로

remainingCapacity

public int remainingCapacity()
항상 제로를 돌려줍니다. SynchronousQueue 에는 내부 용량이 없습니다.

정의:
인터페이스 BlockingQueue <E > 내의 remainingCapacity
반환값:
제로

clear

public void clear()
아무것도 실시하지 않습니다. SynchronousQueue 에는 내부 용량이 없습니다.

정의:
인터페이스 Collection <E > 내의 clear
오버라이드(override):
클래스 AbstractQueue <E > 내의 clear

contains

public boolean contains(Object  o)
항상 false 를 돌려줍니다. SynchronousQueue 에는 내부 용량이 없습니다.

정의:
인터페이스 Collection <E > 내의 contains
정의:
인터페이스 BlockingQueue <E > 내의 contains
오버라이드(override):
클래스 AbstractCollection <E > 내의 contains
파라미터:
o - 요소
반환값:
false

remove

public boolean remove(Object  o)
항상 false 를 돌려줍니다. SynchronousQueue 에는 내부 용량이 없습니다.

정의:
인터페이스 Collection <E > 내의 remove
정의:
인터페이스 BlockingQueue <E > 내의 remove
오버라이드(override):
클래스 AbstractCollection <E > 내의 remove
파라미터:
o - 삭제하는 요소
반환값:
false

containsAll

public boolean containsAll(Collection <? > c)
지정된 컬렉션이 빈 상태(empty)이 아닌 한,false 를 돌려줍니다. SynchronousQueue 에는 내부 용량이 없습니다.

정의:
인터페이스 Collection <E > 내의 containsAll
오버라이드(override):
클래스 AbstractCollection <E > 내의 containsAll
파라미터:
c - 컬렉션
반환값:
지정된 컬렉션이 빈 상태(empty)이 아닌 한,false
관련 항목:
AbstractCollection.contains(Object)

removeAll

public boolean removeAll(Collection <? > c)
항상 false 를 돌려줍니다. SynchronousQueue 에는 내부 용량이 없습니다.

정의:
인터페이스 Collection <E > 내의 removeAll
오버라이드(override):
클래스 AbstractCollection <E > 내의 removeAll
파라미터:
c - 컬렉션
반환값:
false
관련 항목:
AbstractCollection.remove(Object) , AbstractCollection.contains(Object)

retainAll

public boolean retainAll(Collection <? > c)
항상 false 를 돌려줍니다. SynchronousQueue 에는 내부 용량이 없습니다.

정의:
인터페이스 Collection <E > 내의 retainAll
오버라이드(override):
클래스 AbstractCollection <E > 내의 retainAll
파라미터:
c - 컬렉션
반환값:
false
관련 항목:
AbstractCollection.remove(Object) , AbstractCollection.contains(Object)

peek

public E  peek()
항상 null 를 돌려줍니다. 액티브하게 대기되지 않는 한,SynchronousQueue 는 요소를 돌려주지 않습니다.

정의:
인터페이스 Queue <E > 내의 peek
반환값:
null

iterator

public Iterator <E > iterator()
항상 hasNextfalse 를 돌려주는 빈 상태(empty)의 반복자를 돌려줍니다.

정의:
인터페이스 Iterable <E > 내의 iterator
정의:
인터페이스 Collection <E > 내의 iterator
정의:
클래스 AbstractCollection <E > 내의 iterator
반환값:
빈 상태(empty)의 반복자

toArray

public Object [] toArray()
길이가 제로의 배열을 돌려줍니다.

정의:
인터페이스 Collection <E > 내의 toArray
오버라이드(override):
클래스 AbstractCollection <E > 내의 toArray
반환값:
길이가 제로의 배열

toArray

public <T> T[] toArray(T[] a)
배열의 길이가 제로가 아닌 경우에, 지정된 배열의 제로 번째의 요소를 null 로 설정해 돌려줍니다.

정의:
인터페이스 Collection <E > 내의 toArray
오버라이드(override):
클래스 AbstractCollection <E > 내의 toArray
파라미터:
a - 배열
반환값:
지정된 배열
예외:
NullPointerException - 지정된 배열이 null 인 경우

drainTo

public int drainTo(Collection <?  super E > c)
인터페이스 BlockingQueue 의 기술:
이 큐로부터 이용 가능한 모든 요소를 삭제해, 그것들이 지정된 컬렉션에 추가합니다. 이 오퍼레이션은, 이 큐를 반복해 폴링 하는 경우보다 효율적인 경우가 있습니다. 컬렉션 c 에 요소를 추가하려고 했을 때에 장해가 발생하면(자), 관련하는 예외의 throw시에, 요소가 이 큐와 컬렉션의 어느 것에도 존재하지 않는 경우와 한편 또는 양쪽 모두에 존재하는 경우가 있습니다. 큐를 그 자체에 배출하려고 하면(자),IllegalArgumentException 가 throw 됩니다. 또, 오퍼레이션의 진행중으로 지정된 컬렉션이 변경되었을 경우의, 이 오퍼레이션의 동작은 정의되고 있지 않습니다.

정의:
인터페이스 BlockingQueue <E > 내의 drainTo
파라미터:
c - 요소의 전송처의 컬렉션
반환값:
전송 된 요소의 수
예외:
UnsupportedOperationException - 지정된 컬렉션으로 추가의 요소가 지원되어 있지 않은 경우
ClassCastException - 이 큐의 요소의 클래스가 원인으로, 그 요소가 지정된 컬렉션에 추가할 수 없는 경우
NullPointerException - 지정된 컬렉션이 null 인 경우
IllegalArgumentException - 지정된 컬렉션이 이 큐인 경우, 또는 이 큐의 요소가 있는 프로퍼티이 원인으로 지정된 컬렉션에 추가할 수 없는 경우

drainTo

public int drainTo(Collection <?  super E > c,
                   int maxElements)
인터페이스 BlockingQueue 의 기술:
지정된 수이내의 이용 가능한 요소를 이 큐로부터 삭제해, 지정된 컬렉션에 추가합니다. 컬렉션 c 에 요소를 추가하려고 했을 때에 장해가 발생하면(자), 관련하는 예외의 throw시에, 요소가 이 큐와 컬렉션의 어느 것에도 존재하지 않는 경우와 한편 또는 양쪽 모두에 존재하는 경우가 있습니다. 큐를 그 자체에 배출하려고 하면(자),IllegalArgumentException 가 throw 됩니다. 또, 오퍼레이션의 진행중으로 지정된 컬렉션이 변경되었을 경우의, 이 오퍼레이션의 동작은 정의되고 있지 않습니다.

정의:
인터페이스 BlockingQueue <E > 내의 drainTo
파라미터:
c - 요소의 전송처의 컬렉션
maxElements - 전송 하는 요소의 최대수
반환값:
전송 된 요소의 수
예외:
UnsupportedOperationException - 지정된 컬렉션으로 추가의 요소가 지원되어 있지 않은 경우
ClassCastException - 이 큐의 요소의 클래스가 원인으로, 그 요소가 지정된 컬렉션에 추가할 수 없는 경우
NullPointerException - 지정된 컬렉션이 null 인 경우
IllegalArgumentException - 지정된 컬렉션이 이 큐인 경우, 또는 이 큐의 요소가 있는 프로퍼티이 원인으로 지정된 컬렉션에 추가할 수 없는 경우

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.