PHpullh

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 메타데이터를 가집니다.