스레드 멈추게 하기

Copyright (c) 2015-, All Rights Reserved by Kwanghoon Choi
(아래 자바 프로그래밍 강의 교재의 내용을 자유롭게 이용하되 다른 웹 사이트 등을 통한 배포를 금합니다.)

 

2. Java 스레드 (Thread)의 동작을 멈추게 하기

스레드 실행 중에 Thread 클래스의 sleep 메소드를 호출해서 잠시 동작을 멈출 수 있다.

- Thread.sleep(long millis)

sleep 메소드를 활용하면 스레드 실행 속도를 조절할 수 있다.

class MyThread extends Thread {
    public void run() {
        for (i=0; i<10; i++) {
            System.out.println("MyThread");
            Thread.sleep(5000);
        }
    }
}

class MyImplementation implements Runnable {
    public void run() {
        for (i=0; i<10; i++) {
            System.out.println("MyImplementation");
            Thread.sleep(1000);
        }
    }
}

첫번째 스레드에서는 매 5초 마다 메시지를 출력하지만 두번째 스레드에서는 매 1초 마다 메시지를 출력한다. 그리고 두번째 스레드가 먼저 종료될 가능성이 높은 것으로 예상할 수 있다. 위의 프로그램에서 빼놓은 코드가 있다. Thread.sleep 메소드를 호출하면 정상적으로 지정된 시간만큼 멈춘 후에 리턴하기도 하지만 중간에 이 스레드에 인터텁트를 걸면 예외 상황 InterruptedException이 발생한다. 또한 멈추고 있을 시간을 잘못 지정하는 경우 (예컨데, 시간을 음수로 지정) 예외 상황 IllegalArgumentException이 발생한다. Exception - InterruptedException - RuntimeException - IllegalArgumentException InterruptedException의 경우 검사 예외(Checked Exception)이므로 프로그램에서 반드시 처리해야 하고 IllegalArgumentException의 경우 비검사 예외(Unchecked Exception)으로 프로그램이 처리할 수도 그렇지 않을 수도 있다. 참고로 검사 예외를 처리하는 방법은 try-catch 블럭을 사용하거나 Thread.sleep 메소드를 호출하는 코드를 포함하는 메소드에 throws 선언을 추가할 수 있다. 따라서 위의 코드를 아래와 같이 수정할 수 있다.

class MyThread extends Thread {
    public void run() {
        for (i=0; i<10; i++) {
            System.out.println("MyThread");

            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class MyImplementation implements Runnable {
    public void run() throws InterruptedException {
        for (i=0; i<10; i++) {
            System.out.println("MyImplementation");
            Thread.sleep(1000);
        }
    }
}

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *