1. 스레드 (Thread)

스레드(Thread)는 동시 작업을 위한 하나의 실행 단위이다.

앱을 실행하면 하나의 스레드가 시작되는데 이것이 Main Thread이며, 이미지나 UI 제어를 포함한 앱의 기본 실행을 담당한다.


멀티 스레딩 (Multi-threading)

메인 스레드로만 앱을 구현한다면, 대기 시간이 생기는 기능을 수행할 때는 화면도 멈춤 상태로 있게 되는 문제가 발생할 수 있다.

멀티 스레드딩 방식을 사용하여 여러 개의 작업을 동시에 수행하여 이를 해결하도록 한다.

스레드를 새로 생성하면 메인 스레드와 별개로 독립적인 실행이 가능하다.

또한 같은 프로세스 안에 들어 있으면서 메모리 리소스를 공유하므로 효율적인 처리가 가능하다.


데드락 (DeadLock)

그러나, 새로 생성한 스레드는 UI 접근이 불가능하며 오직 메인 스레드만 UI 접근이 가능하다.

이유는 여러 스레드가 동시에 리소스를 접근할 경우 데드락이 발생할 수 있기 때문이다.

데드락이란 시스템에서 어떤 것을 먼저 처리해야 하는지 몰라 시스템을 멈추는 현상을 말한다.


핸들러 (Handler)

그렇기에 핸들러(Handler)를 사용하여 리소스 동시 접근을 막고, 메인 스레드와 새로 생성한 스레드 간에 통신을 한다. 

통신 방식은 메인 스레드에서 처리할 메시지를 전달하여 메시지 큐에 저장하는 방식이다.


메시지 큐 (Message Queue)

메시지 큐는 FIFO 방식으로, 전달 받은 메시지를 순차적으로 처리하여 특정 메시지가 미래의 어떤 시점에 실행되도록 스케줄링할 수 있다.


핸들러를 이용한 통신 과정

메인 스레드 안에 핸들러를 만들고, 새로 생성한 스레드에서는 메시지 객체 안에 데이터를 넣어 메시지 큐에 보낸다.

핸들러는 메시지 큐의 메시지를 순차적으로 처리한다.  





출처: https://www.edwith.org/boostcourse-android/lecture/17086

+ Recent posts