
83
4
장
-
스레드 통신
메시지 큐는 데이터 및 태스크 메시지의 조합을 포함할 수 있다. 소비자 스레드는 순차적으로 그
리고 유형과 독립적으로 메시지를 처리한다. 메시지가 데이터 메시지면 소비자 스레드는 데이터
를 처리한다. 태스크 메시지는 소비자 스레드에서
Runnable
객체가 실행되도록 함으로써 처리되
지만, 소비자 스레드는
Handler
.
handlerMessage
(
Message
)
안에서 처리될 메시지를 수신하지
는 않는다. 데이터 메시지의 경우 메시지를 수신한다.
메시지의 생명주기는 간단하다. 생산자는 메시지를 생성하고 최종적으로 소비자에 의해 처리된
다. 이 설명은 대부분의 사용 사례에 충분하다. 하지만 문제가 발생할 경우, 메시지 처리에 대해
깊이 이해하고 있다면 매우 유용할 것이다. [그림
4
-
8
]에서 보이듯, 생명주기 동안 메시지에 무
슨 일이 일어나는지 네 가지 주요 상태로 나눠서 살펴보자. 런타임은 이전 메시지를 재사용하기
위해 응용프로그램 전체 풀에 메시지 객체를 저장한다. 메시지를 재사용하면 메시지 전달을 위해
매번 새로운 인스턴스를 생성하는 오버헤드를 피할 수 있다. 메시지 객체의 실행 시간은 일반적
으로 매우 짧고, 많은 메시지가 단위시간에 처리된다.
그림
4-8
메시지 생명주기 상태
초기화 상태 대기 상태 전달 상태 재활용 상태
생성