PSD( Private-Self-Development )

BlockingQueue 와 DelayQueue 본문

Backend/Thread

BlockingQueue 와 DelayQueue

chjysm 2024. 8. 26. 19:05

멀티 스레드를 구현하는 도중,

BlockingQueue 에 관하여 알게되어 더 깊게 공부해 보았다.

 

BlockingQueue?

기존의 Queue 를 멀티스레드 환경에서 사용하기에는

여러 위험성이 존재한다.

  • 멀티스레드 환경에서 여러 Thread 가 특정 공유 Queue에 put 하는 경우 메모리가 부족해진다.
  • 멀티스레드 환경에서 여러 Thread 가  특정 공유 Queue에 get 하는 경우 thread-safe 하지 않다.

이러한 단점을 개선하기 위하여 나온것이 BlockingQueue이다.

java.util.concurrent 패키지에 존재 하며, 

구현체가 아닌 interface 이다.

 

BlockingQueue 의 특징

  • get 과 put 이 thread-safe 
  • 특정한 크기를 가지고 이 이상의 데이터가 put 요청 된 경우(반대로 get 하는 경우에 Queue가 빈 경우에도 멈춘다),
    큐에 빈자리가 날 때 까지 해당 스레드를 대기 시킨다(Blocking).

 

BlockingQueue 의 구현체 종류

  • ArrayBlockingQueue
    • 고정 크기의 배열을 기반으로 구현,
      한번 크기가 설정 되면 변경 불가능
  • LinkedBlockingQueue
    • Linked 를 기반으로 구현,
      크기가 유동적
  • PriorityBlockingQueue
    • 요소를 우선순위에 따라 구현 Priority 구현체를 인자값으로 전달할 듯???
  • SynchronousQueue
    • 단 하나의 항목만 저장 할 수 있는 큐. 이 큐에 항목을 넣으면 다른 스레드가 그 항목을 꺼낼 때까지 현재 스레드는 대기.

 

 

DelayQueue?

BlockingQueue 의 구현체로서

요소를 지정된 지연 시간이 지날 때 까지 가져올 수 없다.

주로 스케줄링 또는 재시도 동작에 유용하게 사용된다.

 

DelayQueue 의 특징

  • DelayQueue 의 요소는 Delayed 인터페이스를 구현해야 한다.
  • 내부적으로 PriorityQueue 를 이용하여, 지연 시간에 따라 자동으로 정렬된다.

 

 

 

 


참조 : 

https://olrlobt.tistory.com/66

'Backend > Thread' 카테고리의 다른 글

생산자 소비자 패턴  (2) 2024.08.28
CompletableFuture  (0) 2023.07.12
Callable, Future, Executors, Executor, ExecutorService, ScheduledExecutorService  (0) 2023.07.12
Thread 와 Runnable  (0) 2023.07.11
Thread 란?  (0) 2022.11.15