카테고리 없음

Java > Concurrency > 8. Bounded Buffer/Producer-Consumer problem

Krevis 2024. 9. 30. 06:14

멀티 쓰레드의 기본기를 배울 수 있는 가장 좋은 예

 

 

구성 요소

  • Producer
  • Consumer
  • Buffer

 

 

문제 상황

  • 생산자가 너무 빠를 때
    • 버퍼가 가득 차서 더 이상 데이터를 추가할 수 없음
    • 버퍼가 빌 때까지 대기
  • 소비자가 너무 빠를 때
    • 소비자가 대기

 

Bounded: 경계가 있는, 한계(제한)가 있는

버퍼의 크기가 한정되어 있기 때문에 발생하므로 한정된 버퍼 문제라고 한다

 

 

BlockingQueue

자바는 한정된 버퍼 또는 생산자-소비자 문제를 해결하기 위해 java.util.concurrent.BlockingQueue 인터페이스와 그 구현체들을 제공한다

 

구현체

  • ArrayBlockingQueue
  • LinkedBlockingQueue

 

BlockingDeque 인터페이스도 있다

 

큐에 대해서 대기하게 될 때의 동작 방식에 대해 크게 3가지 메서드 유형으로 구분된다

  • 예외 던짐
    • add, remove, element
  • 특정 값(false / null) 즉시 반환
    • offer, poll, peek
  • 대기(Block)
    • put, take
  • 시간동안 대기
    • offer, poll

 

https://github.com/venzersiz/learn-java8/tree/master/src/test/java/concurrency/boundedproblem