0. 개요


안드로이드 앱은 5초 이내 아무런 응답을 하지 않을 시 실행 중인 앱을 강제로 종료시킵니다.

이러한 현상을 ANR 현상이라고 합니다.



앱을 만들다 보면 액티비티에서 많은 작업을 수행해야 하는 경우가 있습니다.

이 때 기본적으로 생성되는 main스레드에서 처리를 담당할 경우 ANR현상이 발생할 수 있습니다. 



이를 방지하기 위하여 main스레드의 작업을 작업 스레드를 생성하여 분산시켜야 합니다.



주의해야 할 점은 작업스레드는 화면을 변경하는 작업을 수행할 수 없으며 main스레드만이 화면을 변경할 수 있습니다.

만약 작업스레드에서 UI를 변경할 시 예외가 발생하면서 앱이 중지되게 됩니다.







1. 시작하기 전에


시작하기 전에 스레드 및 멀티스레딩 개념을 이해하고 있어야 합니다.



스레드의 사전적 의미는 '실', '실타래' 입니다. 



컴퓨터 용어로는 ..


1. CPU 제어의 흐름


2. 실행 단위


3. 한 프로세스 내부에서 스케줄링이 가능한 개체


라고 정의할 수 있습니다.



프로세스는 실행되면서 프로세스 내부의 명령어들이 CPU에 의해 처리되는 모습을 상상할 수 있습니다.



프로세스가 실행되는 동안 CPU제어의 흐름을 따라가다 보면 마치 실타래의 실처럼 보일 수 있습니다.

즉, CPU 제어의 흐름이라고 볼 수 있는 것 입니다.



C언어로 만드는 간단한 프로그램들 (심지어 main만 정의된 프로그램들)조차도 결국 하나의 메인 스레드를 갖고 있는 것 입니다.



이와 같이 스레드는 프로세스 내부에 존재하며 프로세스 내부에는 기본적으로 하나의 스레드가 존재하고 있는 것 입니다.



이러한 스레드들은 여러개가 수행될 수 있습니다.



간단한 그림으로 보겠습니다.





한 프로세스 내부에서 두개의 스레드가 동시에 수행되고 있는 것을 확인할 수 있습니다.



이 것을 멀티 멀티 스레딩 이라고 합니다.



프로그램 실행 도중 새로운 스레드가 생성되면 이 스레드는 탄생한 코드로 부터 독립적으로 실행을 진행하게 됩니다.



멀티 스레딩을 왜 사용해야 하는지는 금방 이해할 수 있습니다.



컴퓨터가 단일 스레딩으로 구현되어있다면 재밌는 일이 생길겁니다.


한글로 파일을 수정하고 프린트버튼을 누르면 프린터가 진행되는 동안 아무런 작업을 할 수 없습니다.

웹 서버는 한개의 클라이언트가 요청을 할 경우 그 클라이언트를 전담하는 한개의 스레드를 생성하여 요청을 처리합니다. 

만약 웹 서버가 단일 스레딩으로 구현되어 있다면 100개의 클라이언트가 요청 결과를 받기 위해 한명씩 줄서서 처리받는 구조가 되어 버릴 것 입니다.



멀티 스레딩은 응용프로그램이 다수의 스레드를 가지고 다수의 작업을 동시에 처리함으로써, 시간지연과 자원의 비 효율적 사용을 개선할 수 있습니다.



자바로 스레드를 만드는 방법은 두가지가 있습니다.


1. Thread 클래스 사용


2. Runnable 인터페이스 사용




사용 방법은 다음장에서 설명하겠습니다.


[JAVA] 2. 스레드 사용하기[1]. 스레드 구현하기  


http://gsgdvxhx.tistory.com/10




+ Recent posts