13장
1. 용어 정리
프로세스(process): 운영체제에서 실행에 필요한 자원(메모리)를 할당받아 실행 중인 프로그램
스레드(thread): 프로세스가 할당받을 자원을 활용해서 실제로 작업을 수행하는 것
멀티스레드 프로세스(multi-threaded process): 둘 이상의 스레드를 가진 프로세스
스레드 그룹(thread group): 스레드의 집합
보안 상의 이유로 도입되었으며 자신이 속하거나 하위 그룹만 변경 가능
JVM은 main과 system이라는 스레드 그룹을 만들고 JVM 운영에 필요한 스레드를 그룹에 포함시킴
(ex.main 메서드를 수행하는 main 스레드는 main 스레드 그룹, 가비지 컬렉션을 수행하는 finalizer 스레드는 system 스레드 그룹)
스레드 그룹을 지정하지 않을 경우 자동적으로 main 스레드 그룹의 하위 스레드 그룹이 됨
데몬 스레드(daemon thread): 일반 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드
스레드 실행 전 setDaemon(true)를 호출하면 스레드를 데몬 스레드(혹은 사용자 스레드)로 변경
데몬 스레드가 생성한 스레드는 자동적으로 데몬 스레드가 됨
2. 구현과 실행과정
2.1. 스레드의 구현
/*
==========================================================================
1. Thread 클래스 상속
==========================================================================
*/
class ThreadTester {
public static void main(String[] args){
Thread1 t1 = new Thread1();
t1.start();
}
}
class Thread1 extends Thread(){
public void run(){
System.out.println(getName()); // 조상인 Thread의 getName() 호출;
}
}
/*
==========================================================================
2. Runnable 인터페이스 구현
==========================================================================
*/
class ThreadTester {
public static void main(String[] args){
Runnable r = new Thread2();
Thread t2 = new Thread(r);
t2.start();
}
}
class Thread2 implements Runnable{
public void run(){
System.out.println(Thread.currentThread().getName());
}
}
2.2. 스레드의 실행 과정

3. 스레드의 상태와 생명주기
3.1. 스레드의 상태
NEW
스레드가 생성되고 아직 start( )가 호출되지 않은 상태
RUNNABLE
실행 중 또는 실행 가능한 상태
BLOCKED
동기화 블럭에 의해서 일시 정지된 상태(lock이 풀릴 때까지 기다리는 상태)
WAITING TIME_WAITING
- 스레드의 작업이 종료되지는 않았지만 실행가능하지 않은(unrunnable) 일시정지 상태 - TIME_WAITING은 일시정지 시간이 지정된 경우
TERMINATED
스레드의 작업이 종료된 상태
3.2. 스레드의 생명 주기

참고 자료
자바의 정석 - 도우출판
Last updated