BoundedQueue는 생산자 소비자 문제 또는 한정된 버퍼라고 알려진 문제를 효율적으로
해결할 수 있는 자료구조입니다
ReentrantLock과 Condition이라는 스레드 대기공간을 제공해서 생산자와 소비자 스레드를 위한
전용대기 공간을 만들고,
각각에 대해 signal을 통해 각 행동의 결과에 대해 원하는 스레드에게 알릴 수 있습니다
이러한 기능을 자바에서 라이브러리로 제공하는데, 그것이 바로 BlockingQueue입니다
java.util.concurrent.BlockingQueu
라는 인터페이스와 구현체들을 제공합니다
이것을 스레드 관점에서 보면 다음 두가지 작업을 진행합니다
큐가 가득 차면 데이터 추가 작업(put())을 시도하는 스레드는 공간이 생길 때까지 차단됩니다
큐가 비어 있으면 획득 작업을 시도하는 스레드는 큐에 데이터가 들어올 때까지 차단합니다