Thread life cycle(스레드의 생명주기)

CODEDRAGON Development/Java

반응형

 

스레드의 생명주기

스레드는 Thread 객체가 생성되면 생명주기를 갖게 되는데 크게 5가지로 나누게 됩니다.

상태

설명

New

·         객체 생성

·         스레드가 만들어진 상태

·         아직 start()메소드가 호출되지 않은 상태

Runnable

·         실행 대기

·         실행상태로 언제든지 갈수 있는 상태

·         스레드 객체가 생성된 후에 start() 메서드를 호출하면 Runnable 상태로 이동하게 됩니다.

Running

·         실행 상태

·         Runnable 상태에서 스레드 스케줄러에 의해 Running 상태로 이동하게 됩니다

·         스케줄러는 Runnable상태의 스레드중 하나를 선택해서 실행하게됩니다.

Blocked

·         일시 정지

·         사용하고자 하는 객체의 lock이 풀릴 때까지 기다리는 상태

·         스레드가 다른 특정한 이유로 Running 상태에서 Blocked 상태로 이동하게 됩니다.

WAITING

·         일시 정지

·         다른 스레드가 통지할 때까지 기다리는 상태

TIMED_WAITING

·         일시 정지

·         주어진 시간 동안 기다리는 상태

TERMINATED

DEAD

·         실행을 마친 상태(종료)

·         run()메소드 완료시 스레드가 종료되면 그 스레드는 다시 시작할 수 없게 됩니다.

 

 

 

스레드의 생명주기

프로세서를 같이 사용하고 항상 한 스레드만이 실행됩니다.

한 프로세스 안에 있는 스레드는 순차적으로 실행됩니다.

스레드에 자신의 정보를 위한 각각의 프로그램 카운터와 스택을 가지고 있습니다.

 




 

·         Runnable 상태의 스레드만이 스케줄러에 의해 Running상태로 스케줄링 가능합니다.

·         sleep(), join() 메소드의 호출로 스레드는 Blocked 상태가 됩니다.

·         한번 종료된 스레드는 다시 Runnable 상태가 될 수 없지만, Blocked 상태의 스레드는 만족하는 조건이 성립되면 다시 Runnable 상태가 됩니다.

 

 

join() 메서드 사용법

join() 메서드는 join() 메서드를 호출한 스레드가 종료할 때까지 현재의 스레드를 기다리게 됩니다.