JAVA

스레드 제어

옝옹 2022. 12. 5. 17:15

스레드 상태

  • 스레드를 생성하고 시작하면 스레드는 다양한 상태를 가지게 된다.
  • 스레드의 상태는 자동으로 변경될 수도 있고, 코드에 의해서 변경될 수도 있음.
  • 실행 상태 : 실행 대기 상태에 있는 스레드 중에서 운영체제는 하나의 스레드를 선택하고 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() 메소드를 호출해서 즉시 종료시킨다.