BackEnd/Java&Kotilin
[Java] 생성자(Producer)-소비자(Consumer) Pattern
Hero_O
2022. 8. 24. 01:00
Producer-Consumer Pattern
생성자-소비자 패턴은 작업물을 가운데 위치 시키고 작업을 생산자와 작업을 처리자를 분리하는 설계 방법이다.
작업을 생성하고 처리하는 부분이 각각 감당할 수 있는 작업을 비동기적으로 처리하여 부하를 조절할 수 있다는 장점을 가진다.
예를 들어, 물건을 주고 받기 위해 물건 보관함을 이용하게 되면 서로 같은 시간에 만나지 않아도 물건을 전달한다 라는 작업을 처리할 수 있다. 이와 같이 비동기적으로 작업 처리를 분할하여 부하를 조절 할 수 있게 된다.
비슷한 맥락의 예시들
- MQ(Message Queue)
- androidx.fragment 에 뷰 통신에 대한 종속성을 분리방법.
- MVVM
구현 코드
Queue
Queue 구현체 ( JobQueue )
Producer ( 공급자 )
Consumer ( 소비자 )
main() 함수
전체 작업 과정
1. Queue에 공급자가 작업물을 넣는다.(PUT)
2. Queue에 작업물이 put 되면 큐 내에 작업물이 한 개 이상이 되기 때문에, Consumer에게 이를 알린다.
3. 대기상태에서 작업 상태과 된 Consumer 들은 Queue 내부에서 작업물을 가져와(POP) 처리한다.
4. Queue 내부 작업물이 비어지게 되면, Consumer는 Moniter에 대기상태가 된다. ( WAIT )