주 메뉴 열기

바뀜

스레드(Thread)

3,753 바이트 추가됨, 2019년 12월 27일 (금) 16:30
편집 요약 없음
만약 동기화 메소드가 여러 개 있을 경우, 스레드가 이들 중 하나를 실행할 때 다른 스레드는 해당 메소드는 물론이고 다른 동기화 메소드도 실행할 수 없습니다. 하지만 이때 다른 스레드에서 일반 메소드는 실행이 가능합니다.
 
== 스레드 상태 ==
 
스레드 객체를 생성하고 start() 메소드를 호출하면 바로 실행되는 것이 아니라 실행 대기 상태가 됩니다. 실행 대기 상태란 언제든지 실행할 준비가 되어 있는 상태를 말합니다. 운영체제는 실행 대기 상태에 있는 스레드 중에서 하나를 선택해서 실행 상태로 만듭니다.
 
실행 상태의 스레드는 run() 메소드를 모두 실행하기 전에 다시 실행 대기 상태로 돌아갈 수 있으며, 실행 대기 상태에 있는 다른 스레드가 선택되어 실행 상태가 되기도 합니다.
 
실행 상태에서 run() 메소드의 내용이 모두 실행되면 스레드의 실행이 멈추고 종료 상태가 됩니다.
 
=== 실행 대기(waiting) 상태 ===
 
스레드 객체를 생성하고 start() 메소드를 호출하면 곧바로 스레드가 실행되는 것처럼 보이지만 사실은 실행 대기 상태가 됩니다. 실행 대기 상태란 실행을 기다리고 있는 상태를 말합니다.
 
=== 실행(running) 상태 ===
 
실행 대기 상태에 있는 스레드 중에서 운영체제는 하나의 스레드를 선택하고 CPU(코어)가 run() 메소드를 실행하도록 합니다. 그때를 실행(running) 상태라고 합니다.
 
실행 상태의 스레드는 run() 메소드를 모두 실행하기 전에 다시 실행 대기 상태로 돌아갈 수 있습니다. 그리고 실행 대기 상태에 있는 다른 스레드가 선택되어 실행 상태가 됩니다.
 
=== 종료(terminated) 상태 ===
 
이렇게 스레드는 실행 대기 상태와 실행 상태를 번갈아가면서 자신의 run() 메소드를 조금씩 실행합니다. 실행 상태에서 run() 메소드가 종료되면, 더 이상 실행할 코드가 없기 때문에 스레드의 실행은 멈추게 됩니다. 이 상태를 종료(terminated) 상태라고 합니다.
 
이처럼 스레드는 실행 대기 상태와 실행 상태로 번갈아 변하면서, 경우에 따라서 실행 상태에서 일시 정지 상태로 가기도 합니다. 일시 정지 상태는 스레드가 실행할 수 없는 상태입니다. 일시 정지 상태에서는 바로 실행 상태로 돌아갈 수 없고, 일시 정지 상태에서 빠져나와 실행 대기 상태로 가야 합니다.
 
== 스레드 상태 제어 ==
 
실행 중인 스레드의 상태를 변경하는 것을 스레드 상태 제어라고 합니다.
 
=== interrupt() ===
 
일시 정지 상태의 스레드에서 InterruptedException 을 발생시켜, 예외 처리 코드(catch)에서 실행 대기 상태로 가거나 종료 상태로 갈 수 있도록 합니다.
 
interrupt() 메소드는 스레드가 일시 정지 상태에 있을 때 InterruptedException을 발생시키는 역할을 합니다. 이를 이용하면 run() 메소드를 정상 종료할 수 있습니다.
 
주목할 점은 스레드가 실행 대기 또는 실행 상태에 있을 때 interrupt() 메소드가 실행되면 즉시 InterruptedException이 발생하지 않고, 스레드가 미래에 일시 정지 상태가 되면 Interrupted Exception이 발생한다는 것입니다. 따라서 스레드가 일시 정지 상태가 되지 않으면 interrup() 메소드 호출은 아무런 의미가 없습니다.
 
=== sleep(long millis) ===
 
주어진 시간 동안 스레드를 일시 정지 상태로 만듭니다. 주어진 시간이 지나면 자동적으로 실행 대기 상태가 됩니다.
 
<nowiki>
try {
&nbsp;&nbsp;Thread.sleep(1000);
} catch(InterruptedException e) {
&nbsp;&nbsp;// interrupt() 메소드가 호출되면 실행
}
</nowiki>
 
=== stop() ===
 
(DEPRECATED) 스레드를 즉시 종료합니다. 불안전한 종료를 유발하므로 사용하지 않는 것이 좋습니다.
[[분류:자바]]