[java] 쓰레드 중단(stop)과 일시중지(pause)
Java에서는 쓰레드를 중단(stop)하거나 일시중지(pause)하는 기능을 제공합니다. 그러나, 이러한 방법은 안전하지 않고 권장되지 않습니다. 대신, 쓰레드 작업을 중단하는 더 좋은 방법을 사용하는 것이 좋습니다.
쓰레드 중단(stop)
쓰레드를 중단하는 메서드로 stop
메서드가 있지만, 권장되지 않습니다. stop
메서드는 갑작스러운 쓰레드 중단으로 예기치 않은 결과를 초래할 수 있으며, 락을 해제하지 않고 쓰레드를 중단하여 데드락이 발생할 수 있습니다.
public class MyThread extends Thread {
public void run() {
// 쓰레드 작업 수행
}
}
// 사용 예
MyThread thread = new MyThread();
thread.start();
thread.stop();
쓰레드 일시중지(pause)
쓰레드를 일시중지하는 메서드는 suspend
메서드이지만, 권장되지 않습니다. 이 메서드는 데드락을 유발하거나 쓰레드의 상태를 예측할 수 없게 만들 수 있습니다.
public class MyThread extends Thread {
public void run() {
// 쓰레드 작업 수행
}
}
// 사용 예
MyThread thread = new MyThread();
thread.start();
thread.suspend();
권장되는 방법
쓰레드를 안전하게 중단하는 권장되는 방법은 interrupt
메서드를 사용하는 것입니다. interrupt
메서드는 쓰레드에 인터럽트 신호를 보내어 적절한 시점에 쓰레드를 중단할 수 있게 합니다.
public class MyThread extends Thread {
public void run() {
while (!isInterrupted()) {
// 쓰레드 작업 수행
}
}
}
// 사용 예
MyThread thread = new MyThread();
thread.start();
thread.interrupt();
쓰레드를 안전하게 일시중지하는 방법은 내부적인 플래그를 사용하여 쓰레드의 동작을 제어하는 것입니다.
결론
Java에서는 쓰레드를 중단하거나 일시중지하는 메서드를 제공하지만, stop
, suspend
메서드는 권장되지 않습니다. 대신, interrupt
메서드와 내부적인 플래그를 사용하여 안전하게 쓰레드를 제어하는 것이 좋습니다.
참고 문헌: