운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스라고 부른다.
사전적 의미로 한 가닥의 실이라는 뜻
한 가지 작업을 실행하기 위해 순차적으로 실행할 코드를 실처럼 이어놓았다고 해서 유래된 이름
자바의 모든 애플리케이션은 메인 스레드가 main() 메소드를 실행시키면서 시작한다.
main() 메소드의 마지막 코드를 실행하거나 return 문을 만나면 실행이 종료된다.
싱글 스레드 애플리케이션은 메인 스레드가 종료되면 프로세스도 종료된다.
하지만 멀티 스레드 애플리케이션은 실행 중인 스레드가 하나라도 있다면, 프로세스는 종료되지 않는다.
스레드는 자신의 이름을 가지고 있다.
큰 역할을 하는 것은 아니지만, 디버깅을 할 때에 어떤 스레드가 어떤 작업을 하는지 조사할 목적으로 사용될 수 있다.
멀티 스레드 프로세스에서는 스레드들이 객체를 공유해서 작업해야 하는 경우가 있다.
멀티 스레드 프로그램에서 단 하나의 스레드만 실행할 수 있는 코드 영역을 임계 영역이라고 한다.
자바는 임계 영역을 지정하기 위해 동기화 매서드를 제공한다.
스래드가 객체 내부의 동기화 메소드를 실행하면 즉시 객체에 잠금을 걸어 다른 스레드가 동기화 메소드를 실행하지 못하도록 한다.
public synchronized void method() { // 임계 영역 코드 }
스레드 객체를 생성하고 start() 메소드를 호출하면 바로 실행되는 것이 아니라 실행 대기 상태가 된다.
이는 언제든지 실행할 준비가 되어 있는 상태라는 말이다.
스레드가 stop() 메서드를 통해 종료되면 불안전한 종료가 될 수도 있다고 한다.(또한 deprecated 메서드가 됨)
그럼 안전한 종료는??