스레드 상태
- 스레드를 생성하고 시작하면 스레드는 다양한 상태를 가지게 된다.
- 스레드의 상태는 자동으로 변경될 수도 있고, 코드에 의해서 변경될 수도 있음.
- 실행 상태 : 실행 대기 상태에 있는 스레드 중에서 운영체제는 하나의 스레드를 선택하고 CPU가 run() 메소드를 실행하게함
- 종료 상태 : 실행 상태에서 run() 메소드가 종료되면, 더 이상 실행할 코드가 없기 때문에 스레드의 실행은 멈추게 됨
스레드 상태 제어
- 실행중인 스레드의 상태를 변경하는 것
일시 정지
- 실행 중인 스레드를 일정 시간 멈추게 하고 싶다면 Thread 클래스의 정적 메소드인 sleep()을 사용
- 다음과 같이 Thread.sleepO 메소드를 호출한 스레드는 주어진 시간 동안 일시 정지 상태가 되고, 다시 실행 대기 상태로 돌아간다.
안전한 종료
- Thread는 스레드를 즉시 종료하기 위해서 stop() 메소드를 제공하고 있는데, 이 메소드는 deprecated(중요도가 떨어져 이제 사용되지 않음)되었음
- stop() 메소드로 스레드를 갑자기 종료하게 되면 스레드가 사용 중이던 자원들이 불안전한 상태로 남겨지기 때문
- 스레드를 안전하게 종료하기 위해서 stop 플래그를 이용하거나 interrupt() 메소드를 이용하는 방법이 있음.
- stop 플래그 이용하는 방법
- interrupt() 메소드 이용 방법
- 스레드가 일시 정지 상태에 있을 때 InterruptdException을 발생시키는 역할
데몬 스레드
- 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드
- 주 스레드가 종료되면 데몬 스레드는 강제적으로 자동 종료됨
- 주 스레드의 보조 역할을 수행하므로 주스레드가 종료되면 데몬 스레드의 존재 의미가 사라지기 때문
확인 문제
3. interrupt() 메소드는 실행 상태를 간섭해서 일시 정지 상태로 만들어준다.
2. 스레드는 즉시 종료한다.
package sec02.verify.exam03;
public class MovieThread extends Thread {
@Override
public void run() {
while(true) {
System.out.println("동영상을 재생합니다.");
if(this.islnterrupted()) {
break;
}
}
}
}
thread.setDaemon(true);
1. stop() 메소드를 호출해서 즉시 종료시킨다.
'JAVA' 카테고리의 다른 글
멀티 스레드 (0) | 2022.12.05 |
---|---|
java.util 패키지 (0) | 2022.11.30 |
java.lang 패키지 (0) | 2022.11.30 |
익명 객체 (0) | 2022.11.15 |
중첩 클래스와 중첩 인터페이스 (0) | 2022.11.15 |