[ Java.Thread-1. 기본개념 ]



1. Thread 정의

   - 프로그램이 실행되는 순서는 코드를 위에서 아래로 순차적으로 처리 되는 방식을 가진다.

     예) "선언문 -> 분기문 -> 반복문 -> 리턴"구조로 개발했을 경우 

         프로그램의 실행순서도 "선언문 -> 분기문 -> 반복문 -> 리턴"순서 그대로 처리 된다.


    - 이러한 흐름을 (Thread)에 비유해서 스레드(Thread)라고 한다.

      일부러 스레드를 개발하려 하지 않아도 기본적으로 메인스레드(Main Thread)구조로 작동된다.

      메인스레드는 시스템이 우리의 프로그램을 돌리기 위한 가장 기본적인 스레드가 된다.

   

    - 그래서 우리는 이 시스템 스레드인 메인 스레드를 제어하거나 컨트롤을 할 수 없다.

      하지만 자바에서는 프로그래머가 직접 제어하거나 컨트롤 할 수 있는 스레드를 생성하여 사용할 수 있다.

      이러한 스레드를 워킹스레드(Working Thread)라고 한다.


2. Thread 사용이유 1

   - 예를 들어, 서버 기반의 스마트폰 게임을 보면

     서버와 통신을하기 위해 소켓을 열어두고 대기하게 된다.

     하지만 소켓만 열어두고 가만히 있으면 이 소켓이 끊겼는지 아니면 끊기지 않았는지 알 방법이 없다.

   - 그래서 소켓 통신에서는 일정 주기마다 서버로 핑을 날려 이 소켓이 유효한지 아닌지 검사하게 된다.

   - 또, 소켓 통신에서는 일정 주기마다 서버로부터 온 데이터를 확인하고, 서버로 보낼 메시지를 전달한다.

   - 이러한 일련의 작업을 메인스레드에서 하게 된다면 어떻게 될까?

     메인스레드는 게임을 하기 위한 UI(User Interface)부분을 그려주고 그래픽 부분을 담당하게 되는데 코드는 순차적으로 실행되기 때문에 UI를 그리는 동안 정작 통신을 담당하는 소켓부분을 방치하는 수 밖에 없다.

     그러므로 통신을 담당하는 스레드를 하나두어 일정한 시간단위로 체크할 수 없도록 하게 하는 것이다.

    

3. Thread 사용이유 2

   - 영상통화를 하는 예,

   - 간단하게 영상을 받아 뿌려주는  소스와 영상을 만들어 보주는 소스.

     이 두 가지 작업이 동시에 수행 되어야 됨.

     이렇게 두 가지 이상의 일을 스레드를 통해 구현된 프로그램을 멀티스레드 프로그램(Multi Thread Progradm)이라고 한다.


4. Thread  종류

   - 메인스레드 : 프로그램을 실행하기 위한 시스템 스레드

   - 워킹스레드 : 프로그램머가 생성하고 제어할 수 있는 스레드 


5. 워킹스레드

    - 워킹스레드는 메인스레드에서 생성하여 실행하게 된다.

      그렇다고 워킹스레드가 메인 스레드에 종속되었다고 보기 힘들다.

      왜냐하면 한 번 실행된 워킹스레드는 메인스레드가 종료되어도 단독으로 실행되기 때문이다.

    - 그래서 메인스레드는 종료될 때 사용중인 모든 워킹스레드를 종료하고, 마지막에 자신이 종료되어야 한다. 

    - 그렇게 하지 않는다면 메모리와 CPU의 자원을 워킹스레드가 다 차지하게 되어 시스템이 뻗어버릴것이 자명하기 때문이다.

       (메인스레드를 종료할 때 반드시 워킹스레드를 종료해야 한다.)

 

Posted by 농부지기
,