[java] 블로킹 큐의 단점은?
  1. 자원 낭비: 블로킹 큐는 내부적으로 스레드를 사용하여 작업을 처리합니다. 따라서 큐가 비어있을 때에도 스레드가 계속해서 실행되어야 하므로, 자원이 낭비될 수 있습니다.

  2. 데드락 가능성: 블로킹 큐는 스레드가 큐가 비어있을 때 블로킹되어 대기하다가 요소가 추가되면 스레드가 깨어나 작업을 처리합니다. 하지만 여러 스레드가 블로킹 큐에 접근하는 경우 데드락이 발생할 수 있습니다. 예를 들어, 스레드 A가 큐에 요소를 추가하려고 블로킹되어 대기하고 있는 경우에, 스레드 B가 큐에 요소를 제거하려고 하면 데드락이 발생할 수 있습니다.

  3. 처리 지연: 블로킹 큐는 스레드가 대기하다가 작업이 추가되면 깨어나 작업을 처리합니다. 따라서 스레드가 대기하고 있는 동안에는 작업이 처리되지 않으므로, 처리 지연이 발생할 수 있습니다.

따라서, 블로킹 큐를 사용할 때에는 이러한 단점들을 고려하여 적절한 상황에서 사용해야 합니다.

참고 자료:

  1. Java Concurrency in Practice, Brian Goetz et al. (Addison-Wesley Professional, 2006)
  2. “아키텍처 패턴과 멀티스레드 시스템” - 기계인간 John V. Neumann (https://appeach.net/p/12794)