JAVA · 비동기/동시성
BlockingQueue
생산자-소비자 패턴을 위한 BlockingQueue 구현체들입니다.
비동기/동시성중급BlockingQueue생산자소비자puttake
핵심 설명
생산자-소비자 패턴을 위한 BlockingQueue 구현체들입니다.
Java code
import java.util.concurrent.*;
public class BlockingQueueDemo {
// 생산자-소비자 패턴
static final BlockingQueue<String> queue =
new ArrayBlockingQueue<>(5); // 용량 제한
static class Producer implements Runnable {
@Override
public void run() {
try {
for (int i = 0; i < 10; i++) {
String item = "상품-" + i;
queue.put(item); // 큐 가득 차면 대기
System.out.println("생산: " + item);
}
queue.put("END"); // 종료 신호
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
static class Consumer implements Runnable {
@Override
public void run() {
try {
while (true) {
String item = queue.take(); // 비어있으면 대기
if ("END".equals(item)) break;
System.out.println("소비: " + item);
Thread.sleep(200); // 처리 시간
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
public static void main(String[] args) throws Exception {
Thread producer = new Thread(new Producer());
Thread consumer = new Thread(new Consumer());
producer.start();
consumer.start();
producer.join();
consumer.join();
System.out.println("완료!");
}
}학습 팁
ArrayBlockingQueue는 용량 고정, LinkedBlockingQueue는 가변(기본 무한)입니다. 메모리 관리를 위해 용량을 지정하세요.
주의할 점
offer()는 큐가 가득 차면 false를 반환하고, put()은 블로킹합니다. 목적에 맞는 메서드를 선택하세요.
자주 묻는 질문
BlockingQueue란 무엇인가요?
생산자-소비자 패턴을 위한 BlockingQueue 구현체들입니다.
BlockingQueue 학습 시 주의할 점은 무엇인가요?
offer() 는 큐가 가득 차면 false 를 반환하고, put() 은 블로킹합니다. 목적에 맞는 메서드를 선택하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.