운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스라고 한다. 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하면 프로세스라고 불린다. 하나의 애플리케이션이 여러 프로세스를 만들기도 한다. 예를 들면 크롬이라는 애플리케이션을 두 개 실행했다면 두개의 크롬 프로세스가 생성된 것이다.
멀티 태스킹은 두 가지 이상의 작업을 동시에 처리하는 것을 말한다. 운영체제는 멀티 태스킹을 할 수 있도록 CPU 및 메모리 자원을 프로세스마다 적절히 할당해주고, 병렬로 실행시킨다.
멀티 태스킹이 반드시 멀티 프로세스를 뜻하는 것은 아니다. 한 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 애플리케이션도 있다. 예를 들면 미디어 플레이어는 동영상 재생과 소리 재생 두 작업을 동시에 하고, 메신저는 채팅을 하면서 파일 전송 기능을 수행하기도 한다. 이렇게 하나의 프로세스에서 두 가지 이상의 작업을 처리하는 데는 멀티 스레드가 사용되는 것이다.
하나의 스레드는 하나의 코드 실행 흐름이다. 고로 한 프로세스 내에 스레드가 두 개라면 두 개의 코드 실행 흐름이 생긴다는 것이다. 멀티 프로세스가 애플리케이션 단위의 멀티 태스킹이라면, 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹이라고 볼 수 있다.
멀티 스레드는 하나의 프로세스 내부에 생성되기 때문에 하나의 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있다. 그렇기 때문에 멀티 스레드에서는 예외 처리에 신경써야 한다.
메인 스레드
모든 자바 애플리케이션은 메인 스레드가 main() 메소드를 실행하면서 시작된다. 메인 스레드는 main() 메소드의 첫 코드부터 아래로 순차적으로 실행하고, main() 메소드의 마지막 코드를 실행하거나 return 문을 만나면 실행이 종료된다.
메인 스레드는 필요에 따라 작업 스레드들을 만들어서 병렬로 코드를 실행할 수 있다.
멀티 스레드에서는 실행 중인 스레드가 하나라도 있다면, 프로세스는 종료되지 않는다.