- [Java]ConcurrentLinkedQueue란? 목차
java.util 에서 제공하는 Queue class는 멀티 스레드 환경에서 critical section에 대한 동기화가 적용되어 있지 않다.
즉 멀티 스레드 환경에서 Queue 객체를 사용하게 된다면 아래와 같은 코드에 문제가 발생한다.
queue.poll();
poll() 함수는 Queue 객체 맨 앞에 들어있는 data를 꺼내오는 동작을 수행한다.
개발자가 원하는 동작은 꺼내오는 동시에 data가 삭제되는 것이다.
즉, 다음번 poll() 함수에서는 다른 data를 꺼내오게 될 것을 기대한다.
하지만 멀티 스레드 환경에서는 이런 기대는 만족되지 않는다.
여러 스레드 중 2개나 3개의 스레드가 poll() 함수를 동일하게 수행하는 결과가 나타날 수 있기 때문이다.
만약 queue에 [“1”, “2”, “3”] 과 같이 데이터가 들어있다고 가정하자.
스레드 3개가 critical section에서 poll() 함수를 수행해 모두 “1”이라는 데이터를 가져오면 queue는 [“2”, “3”] 데이터를 가지게 된다.
이로써 개발자가 원한 동작은 수행되지 않고 예측하지 않은 동작이 수행돼 동작상에 에러가 발생할 수 있다.
멀티 스레드 환경에서 이러한 문제를 해결하기 위해 제공하는 Class가 바로 ConcurrentLinkedQueue이다.
큐가 비어있을 경우 null을 리턴한다.
사용예시
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
Queue<YourObject> queue = new ConcurrentLinkedQueue<YourObject>();
//data를 offer 할 때
put: queue.offer(Data);
//data를 꺼낼 때
get: queue.poll();
'Java' 카테고리의 다른 글
[JAVA]큐(Queue)&PriorityQueue 와 연결리스트(LinkedList) 란? (0) | 2020.05.08 |
---|---|
[Java] -Files probeContentType()이란? (0) | 2020.03.19 |
[Java]-toString()이란? (0) | 2019.10.27 |
[Java]-Vector와 ArrayList의 차이 (0) | 2019.10.27 |
[Java]-Comparable Comparator 차이 (0) | 2019.10.26 |