Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 멀티스레드
- zipkin
- The law of Demeter
- 스레드
- 알고리즘
- Parallel Old GC
- saga pattern
- TypeScript
- java 정렬
- Spring Cloud Netfilx Eureka
- spring cloud
- 스프링 배치
- MSA
- Spring Boot Actuator
- 키클락
- thread
- Java
- Resilinece4j
- Action Pattern
- 체인 패턴
- Transaction Pattern
- spring batch
- JPA
- 배치
- Serial GC
- 디자인 패턴
- 타입스크립트
- 디자인패턴
- 생산자 소비자 패턴
- 사가 패턴
Archives
- Today
- Total
PSD( Private-Self-Development )
BlockingQueue 와 DelayQueue 본문
멀티 스레드를 구현하는 도중,
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 를 기반으로 구현,
크기가 유동적
- Linked 를 기반으로 구현,
- PriorityBlockingQueue
- 요소를 우선순위에 따라 구현 Priority 구현체를 인자값으로 전달할 듯???
- SynchronousQueue
- 단 하나의 항목만 저장 할 수 있는 큐. 이 큐에 항목을 넣으면 다른 스레드가 그 항목을 꺼낼 때까지 현재 스레드는 대기.
DelayQueue?
BlockingQueue 의 구현체로서
요소를 지정된 지연 시간이 지날 때 까지 가져올 수 없다.
주로 스케줄링 또는 재시도 동작에 유용하게 사용된다.
DelayQueue 의 특징
- DelayQueue 의 요소는 Delayed 인터페이스를 구현해야 한다.
- 내부적으로 PriorityQueue 를 이용하여, 지연 시간에 따라 자동으로 정렬된다.
참조 :
'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 |