프로세스는 실행중인 애플리케이션을 의미한다.
프로세스는 데이터, 컴퓨터 자원, 그리고 스레드로 구성되는데, 스레드는 데이터와 애플리케이션이 확보한 자원을 활용하여 소스코드를 실행한다.
정리하면, 스레드는 하나의 코드 실행 흐름이라고 볼 수 있다. (= 명령의 흐름, 일꾼이 몇명이냐)
그동안 main 메서드 실행 했던것이, 메인 스레드가 main메서드를 실행시켜준 것이었다.
어떤 자바 애플리케이션의 소스코드가 싱글 스레드로 작성되었다면, 그 애플리케이션이 실행되어 프로세스가 될 때 메인 스레드만 가지는 싱글 스레드 프로세스가 된다.
메인 스레드에서 다른 스레드를 생성하여 실행시키면 해당 애플리케이션은 멀티 스레드로 동작한다.
작업 스레드가 수행할 코드를 작성하고, 작업 스레드를 생성하여 실행시켜야하는데
스레드의 이름을 조회, 변경하는 것이 가능하다.
멀티 스레드 프로세스의 경우, 두 스레드가 같은 데이터를 공유하게 되어 문제가 발생할 수 있다.
그래서 임계 영역을 설정해주어야한다.
임계 영역은 오직 하나의 스레드만 코드를 실행할 수 있는 코드 영역을 의미한다.
락은 임계 영역을 포함하고 있는 객체에 접근할 수 있는 권한을 의미한다.
즉, 임계 영역으로 설정된 객체가 다른 스레드에 의해 작업이 이루어지고 있지 않을 때, 임의의 스레드 a는 해당 객체에 대한 락을 획득하여 임계영역 내의 코드를 실행할 수 있다.
JVM은 자바로 작성한 소스 코드를 해석해 실행하는 별도의 프로그램이다.
JVM에 자바 프로그램이 로드되어 실행될 때 특정 값 및 바이트코드, 객체, 변수 등과 같은 데이터들이 메모리에 저장되어야한다.
런타임 데이터 영역이 바로 이런 정보를 담는 메모리 영역이며, 크게 5가지 영역으로 구분되어있다.

