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. 스레드의 실행 과정

png

3. 스레드의 상태와 생명주기

3.1. 스레드의 상태

상태
설명

NEW

스레드가 생성되고 아직 start( )가 호출되지 않은 상태

RUNNABLE

실행 중 또는 실행 가능한 상태

BLOCKED

동기화 블럭에 의해서 일시 정지된 상태(lock이 풀릴 때까지 기다리는 상태)

WAITING TIME_WAITING

- 스레드의 작업이 종료되지는 않았지만 실행가능하지 않은(unrunnable) 일시정지 상태 - TIME_WAITING은 일시정지 시간이 지정된 경우

TERMINATED

스레드의 작업이 종료된 상태

3.2. 스레드의 생명 주기

png

참고 자료

  • 자바의 정석 - 도우출판

Last updated