Notice
Recent Posts
Recent Comments
Link
SeouliteLab
Java에서 ArrayBlockingQueue를 활용한 스레드간 안전한 데이터 전달 방법 본문
소개:
Java에서 ArrayBlockingQueue는 고정 크기의 배열을 기반으로 한 스레드 안전한 큐 구현체입니다. 이 글에서는 ArrayBlockingQueue를 사용하여 스레드 간에 안전하게 데이터를 전달하고 처리하는 방법에 대해 알아보겠습니다.
ArrayBlockingQueue 소개:
ArrayBlockingQueue는 java.util.concurrent 패키지에 포함되어 있으며, 고정된 크기의 배열을 기반으로 한 블로킹 큐입니다. 큐에 데이터를 추가하거나 제거할 때 스레드 안전하게 동작하며, 큐가 가득 차거나 비어 있을 때 블로킹됩니다.
설정:
Java 5 이상 버전에서는 ArrayBlockingQueue 클래스를 사용할 수 있습니다.
예제 1: ArrayBlockingQueue를 사용하여 스레드 간 데이터 전달
import java.util.concurrent.ArrayBlockingQueue;
public class ArrayBlockingQueueExample {
public static void main(String[] args) {
ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<>(5);
// Producer 스레드: 큐에 데이터 추가
Thread producer = new Thread(() -> {
for (int i = 1; i <= 5; i++) {
try {
queue.put(i); // 데이터 추가
System.out.println("Producer: " + i + " 추가");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
// Consumer 스레드: 큐에서 데이터 제거
Thread consumer = new Thread(() -> {
for (int i = 0; i < 5; i++) {
try {
int value = queue.take(); // 데이터 제거
System.out.println("Consumer: " + value + " 제거");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
producer.start();
consumer.start();
}
}
출력 결과:
Producer: 1 추가
Producer: 2 추가
Producer: 3 추가
Consumer: 1 제거
Producer: 4 추가
Consumer: 2 제거
Producer: 5 추가
Consumer: 3 제거
Consumer: 4 제거
Consumer: 5 제거
ArrayBlockingQueue 설명:
위 예제에서는 ArrayBlockingQueue를 사용하여 Producer 스레드가 큐에 데이터를 추가하고, Consumer 스레드가 큐에서 데이터를 제거하는 방법을 보여줍니다. 큐가 가득 차거나 비어 있으면 스레드가 블로킹되어 대기하므로, 데이터 전달 과정에서 안전하게 처리됩니다.
'프로그래밍' 카테고리의 다른 글
jQuery를 활용한 h태그 내용 변경 예제 (0) | 2024.03.26 |
---|---|
Java에서 디렉토리 크기 계산하는 방법 (0) | 2024.03.26 |
Java에서 AtomicLong을 활용한 원자적인 연산 처리 방법 (0) | 2024.03.26 |
Java에서 CountDownLatch를 활용한 동기화 작업 처리 방법 (0) | 2024.03.26 |
Java에서 쓰레드(Thread) 다루기: 생성, 실행, 정지 (0) | 2024.03.26 |