본문 바로가기
  • Coding & Book
학습단/JAVA 학습단

16. 혼공자 16일차(스레드 제어)

by 루이3 2023. 7. 27.

실행상태

  • 실행 대기 상태는 실행을 기다리고 있는 상태를 말합니다.
  • 실행대기 상태에 있는 스레드 중에서 운영체제가 하나의 스레드를 선택하고
    CPU run() 메소드를 실행하는데 이때를 실행상태라고 합니다.

 

종료상태

  • 실행상태에서 run() 메소드가 종료되면 스레드의 실행이 멈추게 되는데 그 상태를 종료 상태라고 합니다.

 

스레드 상태 제어

  • 실행중인 스레드의 상태를 변경하는 것을 스레드 상태 제어라고 합니다.
  • 예시로 동영상을 보다가 일시정지할 때 동영상 스레드를 일시 정지로 만드는 경우가 있습니다.

 

메소드 설명
interrupt() 일시 정지 상태의 스레드에서 InterruptedException을 발생시켜 예외처리 코드에서 실행 대기 상태로 가거나 종료 상태로 갈 수 있도록 합니다.
sleep(long millis) 주어진 시간 동안 스레드를 일시 정지 상태로 만듭니다.
stop() 스레드를 즉시 종료 합니다.

 

 

interrupt() 예시

Interrupt.java 파일

package sec14.exam01;

public class Interrupt {
	public static void main(String[] args)  {
			Thread thread = new PrintThread();
			thread.start();
			
			try {
				Thread.sleep(1000); } catch (InterruptedException e) {}
			
			thread.interrupt();
		}
	}

PrintThread.java 파일

package sec14.exam01;

public class PrintThread extends Thread {
	public void run() {	
		try {
			while(true) {
				System.out.println("실행");
				Thread.sleep(1);
			}	
		} catch(InterruptedException e) {}
		System.out.println("종료");
	}
}

 

 

sleep(lon millis)예시

  • 주어진 시간(1초) 동안 일시 정지 상태가 되고 다시 실행대기 상태로 돌아갑니다.
  • 단위는 밀리세컨드 단위입니다.(1/1000초)
try {
	Thread.sleep(1000);
}catch(InterruptedExceptiopn e {
	//interrupt() 메소드가 호출되면 실행
}

 

 

stop() 예시

  • 아래 코드는 stop 플래그를 이용해서 run() 메소드의 종료를 유도하는 것입니다.
public class XXXThread extends Thread {
	private boolean stop;
	
	public void run() {
		while( !stop ) {
			스레드가 반복 실행 하는 코드;
		}
		스레드가 사용한 자원 정리
	}
}

 

데몬 스레드

  • 데몬 스레드는 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드입니다.
  • 주 스레드가 종료되면 데몬 스레드는 강제적으로 자동 종료됩니다.
  • 아래 코드는 1초 주기로 save() 메소드를 자동 호출하고 메인스레드가 3초 후 종료되면 AutoSaveThread도 같이 종료되는 데몬 스레드입니다.

 

AutoSaveThread.java 파일

package sec14.exam01;

public class AutoSaveThread extends Thread {
	public void save() {
		System.out.println("작업 내용을 저장함.");
	}
	
	@Override
	public void run() {
		while(true) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e){
				break;
			}
			save();
		}
	}
}
DaemonExample.java 파일
package sec14.exam01;

public class DaemonExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		AutoSaveThread autoSaveThread = new AutoSaveThread();
		autoSaveThread.setDaemon(true);
		autoSaveThread.start();
			
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
		}
		
		System.out.println("메인 스레드 종료");
	}
}

결과

'학습단 > JAVA 학습단' 카테고리의 다른 글

17. 혼공자 17일차(컬렉션 프레임 워크)  (0) 2023.08.07
4주차 완료  (0) 2023.07.28
15. 혼공자 15일차(멀티 스레드)  (0) 2023.07.24
3주차 완료  (0) 2023.07.20
14. 혼공자 14일차(java.util 패키지)  (0) 2023.07.20