Java - Thread - Interruption
1 분 소요
Java - Thread - Interruption
- 실행되고 있는 Thread를
.interrupt()
를 사용해서 종료시킬 수 있습니다. 단, 이때 Thread가 .join()
이나, .sleep()
를 실행하고 있는 상황이어야 하죠.
// MyThread.java
import java.util.Date;
public class MyThread extends Thread {
@Override
public void run() {
try {
Date startDate = new Date(System.currentTimeMillis());
System.out.printf("MyThread starts at %s \n", startDate);
// .interrupt()가 실행되었을때,
// 현재 Thread가 .sleep, .join 중 하나인 상태에 있어야, 종료됩니다.
Thread.sleep(6000);
Date endDate = new Date(System.currentTimeMillis());
System.out.printf("MyThread ends at %s \n", endDate);
} catch (Exception e) {
Date exceptionDate = new Date(System.currentTimeMillis());
System.out.printf("Exception occurred at %s \n", exceptionDate);
}
}
}
- 다음처럼
.interrupt()
를 사용해서 Thread를 종료시킬 수 있습니다.
import java.lang.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Thread thread1 = new MyThread();
thread1.start();
thread1.interrupt();
/*
MyThread starts at Sun Jan 17 22:21:44 KST 2021
Exception occurred at Sun Jan 17 22:21:44 KST 2021
*/
}
}
Java - interruption - isInterrupted
.interupt()
를 실행했을 때 해당 Thread가 종료되려면, sleep
, join
상태에 있어야 합니다.
- 아니면, 현재 interruption 상태인지 확인해주는
.isInterrupted()
를 사용해서 처리해줄 수도 있죠.
- 아래 코드는 MyThread에서,
isInterrupted()
를 통해 특정 부분을 실행하지 않도록 처리해주었습니다.
// MyThread.java
import java.util.Date;
public class MyThread extends Thread {
@Override
public void run() {
try {
Date startDate = new Date(System.currentTimeMillis());
System.out.printf("MyThread starts at %s \n", startDate);
//Thread.sleep(6000);
for(int i=0; i < 100000; i++) {
// 현재 interruption 인지 상태를 확인하며 맞을 경우 thread를 종료합니다.
if (isInterrupted()) {
break;
} else {
Date iterDate = new Date(System.currentTimeMillis());
System.out.printf("Thread iter %d at %s \n", i, iterDate);
}
}
Date endDate = new Date(System.currentTimeMillis());
System.out.printf("MyThread ends at %s \n", endDate);
} catch (Exception e) {
Date exceptionDate = new Date(System.currentTimeMillis());
System.out.printf("Exception occurred at %s \n", exceptionDate);
}
}
}
- 이렇게 처리한 다음, main code를 실행하면 다음과 같습니다.
MyThread starts at Sun Jan 17 22:25:36 KST 2021
MyThread ends at Sun Jan 17 22:25:36 KST 2021
댓글남기기