멀티 쓰레드의 기본기를 배울 수 있는 가장 좋은 예
구성 요소
- 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