실행상태
- 실행 대기 상태는 실행을 기다리고 있는 상태를 말합니다.
- 실행대기 상태에 있는 스레드 중에서 운영체제가 하나의 스레드를 선택하고
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 |