Skip to content

Latest commit

 

History

History
20 lines (10 loc) · 1.59 KB

File metadata and controls

20 lines (10 loc) · 1.59 KB

LinkedBlockingQueue 란?

LinkedBlockingQueue는 이름에서 알 수 있듯이 BlockingQueueLinkedList의 특징을 가진 클래스라고 할 수 있습니다.

스크린샷 2021-02-08 오후 8 36 10

생성자를 보면 위와 같이 기본 생성자, 용량을 지정할 수 있는 생성자가 존재합니다. 기본 생성자로 만들었을 때는 Integer.MAX_VALUE의 용량을 가지는 것을 볼 수 있습니다.

그리고 LinkedBlockingQueue는 put() 및 take() 작업에 고유한 lock을 사용합니다. 그래서 put(), take() 모두 병렬로 수행되어 처리 속도를 개선할 수 있습니다.

스크린샷 2021-02-08 오후 8 42 53

그리고 LinkedBlockingQueue 내부를 보면 위와 같이 Node를 이용하여 LinkedList의 형태를 유지합니다.

즉, 노드 객체를 만들어서 삽입 or 삭제를 해야하기 때문에 ArrayBlockingQueue 보다는 비용이 비싸다는 특징이 있습니다.

용량이 빠르게 커지거나, 빠르게 축소되는 경우에는 LinkedBlocingQueue 보다는 ArrayBlockingQueue가 더 낫습니다. (ArrayBlockingQueue는 미리 용량을 할당해놓기 때문에 빠르게 삽입, 삭제를 할 수 있습니다.)

마지막으로 LinkedBlockingQueue의 성능은 예측하기가 힘들기 때문에, 매번 성능 체크를 해야합니다!