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() 메서드를 호출한 스레드가 종료할 때까지 현재의 스레드를 기다리게 됩니다.