한번에 하나의 요소만 저장할 수 있는 특징 존재
데이터를 생성하는 스레드와 데이터를 소비하는 스레드 간의 상호 작용 시나리오에서 주로 사용
이 메서드는 큐의 헤드를 제거하고 반환하려고 시도하며, 큐가 비어 있는 경우 지정된 timeout 기간 동안 요소가 사용 가능해질 때까지 대기합니다.
타임아웃 내에 요소가 사용 가능해지면 큐에서 제거되고 반환됩니다. 타임아웃이 만료되면 null을 반환합니다.
예시 사용법:
SynchronousQueue<Integer> queue = new SynchronousQueue<>();
try {
Integer result = queue.poll(5, TimeUnit.SECONDS);
if (result != null) {
// 큐에서 요소를 성공적으로 폴링했습니다.
} else {
// 타임아웃이 만료되어 요소를 사용할 수 없었습니다.
}
} catch (InterruptedException e) {
// InterruptedException 처리
}
이러한 타임아웃 기반 메서드는 SynchronousQueue에서 작업이 성공하거나 요소가 사용 가능해질 때까지 스레드가 얼마나 기다려야 하는지를 제어하고, 무한한 블로킹을 피하고 타임아웃 시나리오를 우아하게 처리하는 데 유용합니다.
버퍼가 없는 Queue이다. 이는 내부적으로 Item을 저장할 공간이 없기 때문에 Queue에서 Item을 가져가려는 Thread는 물론이고 Queue에 Item을 저장하려는 Thread도 상대방 Thread가 없을 때는 대기하도록 한다.
이것은 이 SynchronousQueue의 의도된 동작으로서 Item을 건네는 Thread와 Item을 가져가려는 Thread간에 Item을 전달시켜주는 랑데뷰 채널으로서 작동