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 |
Tags
- thread
- Spring Cloud Netfilx Eureka
- 알고리즘
- saga pattern
- spring cloud
- 생산자 소비자 패턴
- Spring Boot Actuator
- Resilinece4j
- 타입스크립트
- MSA
- 스레드
- Action Pattern
- Transaction Pattern
- 배치
- 사가 패턴
- 키클락
- 디자인 패턴
- Parallel Old GC
- TypeScript
- JPA
- Java
- The law of Demeter
- 스프링 배치
- Serial GC
- java 정렬
- spring batch
- 멀티스레드
- 체인 패턴
- 디자인패턴
- zipkin
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 |