[Java] 자바 스레드(Thread) 개념 정리
Intro
데스크톱에서 Windows의 작업 관리자나 Mac의 활성 상태 보기에 들어가면, 실행 중인 프로그램들이 나열된다. 이렇게 실행 중인 프로그램이나 어플리케이션을 프로세스라 한다.
프로세스 내에서는 실행되는 소스 코드의 실행 흐름들이 존재하는데, 이를 스레드(Thread)라 한다.
하나의 프로세스에는 하나의 스레드를 가질 수 있고, 여러 개의 스레드를 가질 수 있다.
하나의 스레드를 가지는 프로세스를 싱글 스레드 프로세스, 여러 개의 스레드를 가지는 프로세스를 멀티 스레드 프로세스라 한다.
이를 해석하면, 멀티 스레드 프로세스는 프로그램 또는 어플리케이션이 동시 작업을 할 수 있다는 것이다. 즉, 여러 코드를 각 스레드에 분배하여 동시에 실행시키는 것이다.
자바에서도 소스 코드 내에서 따로 스레드를 생성하여, 멀티 스레드를 활용할 수 있다.
스레드란?
먼저, 프로세스(Process)는 실행 중인 프로그램을 의미한다. 프로그램이 실행되면 운영체제로부터 실행에 필요한 만큼의 메모리를 할당받아 프로세스가 된다.
프로세스에는 데이터, 컴퓨터 자원, 스레드로 구성되어 있는데, 스레드(Thread)는 데이터와 프로그램이 확보한 자원을 활용하여 소스 코드를 실행하는 역할을 수행한다.
즉, 스레드는 소스 코드의 실행 흐름이라고 볼 수 있다.
메인 스레드(Main thread)
자바 어플리케이션을 실행하면 가장 먼저 실행되는 메서드는 main 메서드이다.
이는 즉, 메인 스레드가 main 메서드를 실행시켜 주는 것이다. 메인 스레드는 main 메서드의 코드를 처음부터 순차적으로 실행시키며, 코드의 끝을 만나거나 return문을 만나면 종료한다.
만약, 자바로 작성된 프로그램의 소스 코드가 싱글 스레드로 작성되었다면, 해당 프로그램이 실행될 때 메인 스레드만을 가지는 싱글 스레드 프로세스가 될 것이다.
반면에 메인 스레드에서 다른 스레드를 생성하여 실행한다면, 이는 멀티 스레드 프로세스가 되는 것이다.
멀티 스레드(Multi-Thread)
하나의 프로세스는 여러 개의 스레드를 가질 수 있다. 이러한 경우를 멀티 스레드 프로세스라고 한다.
여러 개의 스레드를 가진 다는 것은, 해당 프로세스가 스레드의 개수만큼 동시에 작업을 수행할 수 있다는 것이다. 이를 멀티 스레딩이라 한다.
멀티 스레딩은 하나의 프로그램 내에서 여러 작업을 동시에 수행하는 멀티 태스킹(Multi-tasking)을 구현하는 데 핵심적인 역할을 한다.
만약, 어떤 프로그램을 사용할 때, 상대방과 메시지를 주고받으면서 다른 행동을 할 수 있다. 이와 같이 여러 작업을 동시에 수행하려면 동시에 실행할 수 있도록 추가적인 스레드가 필요하다.