Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

suspend(), resume(), stop() 본문

Java/JAVA3

suspend(), resume(), stop()

빌드이너프 2023. 8. 7. 09:46

 

suspend()

쓰레드의 실행을 일시정지 시킨다

deprecated됨(사용을 권장하지 않는다) => dead-lock 교착상태를 일으킬 가능성이 있기 때문

void suspend() // 쓰레드를 일시정지 시킨다

 

resume()

쓰레드의 실행을 재개시킨다

deprecated됨(사용을 권장하지 않는다) => dead-lock 교착상태를 일으킬 가능성이 있기 때문

void resume() // suspend()에 의해 일시정지된 쓰레드를 실행대기상태로 만든다

 

stop()

쓰레드의 실행을 완전정지 시킨다

deprecated됨(사용을 권장하지 않는다) => dead-lock 교착상태를 일으킬 가능성이 있기 때문

void stop() // 쓰레드를 즉시 종료시킨다

 

suspend(), resume(), stop()는 교착상태에 빠지기 쉬워서 deprecated(잘 사용하지 않는) 되었다

void suspend()        쓰레드를 일시정지 시킨다
void resume()          suspend()에 의해 일시정지된 쓰레드를 실행대기 상태로 만든다
void stop()               쓰레드를 즉시 종료시킨다
class ThreadTest implements Runnable {
    boolean suspended = false;
    boolean stopped = false;
    
    public void run() {
        while(!stopped) {
            if(!suspended) {
                /* 쓰레드가 수행할 코드 작성 */
            }
        }
    }
    public void suspend() { suspended = true; }
    public void resume() { suspended = false; }
    public void stop() { stopped = true; }
}

 

코드

class ThreadTest {
    public static void main(String args[]) {
        MyThread th1 = new MyThread("*");
        MyThread th2 = new MyThread("**");
        MyThread th3 = new MyThread("***");
        th1.start();
        th2.start();
        th3.start();

        try {
            Thread.sleep(2000);
            th1.suspend();	// 쓰레드 th1을 잠시 중단시킨다.
            Thread.sleep(2000);
            th2.suspend();
            Thread.sleep(3000);
            th1.resume();	// 쓰레드 th1이 다시 동작하도록 한다.
            Thread.sleep(3000);
            th1.stop();		// 쓰레드 th1을 강제종료시킨다.
            th2.stop();
            Thread.sleep(2000);
            th3.stop();
        } catch (InterruptedException e) {}
    } // main
}

class MyThread implements Runnable {
    volatile boolean suspended = false; // volatile: 쉽게 바뀌는 변수, 복사본 사용하지 말고 직접 RAM의 원본에서 값을 가져다 사용
    volatile boolean stopped = false;

    Thread th;

    MyThread(String name) {
        th = new Thread(this, name); // Thread(Runnable r, String name)
    }

    void start() {
        th.start();
    }

    void stop() {
        stopped = true;
    }

    void suspend() {
        suspended = true;
    }

    void resume() {
        suspended = false;
    }

    public void run() {
        while(!stopped) {
            if (!suspended) {
                System.out.println(Thread.currentThread().getName());
                try {
                    Thread.sleep(1000); // 1초
                } catch(InterruptedException e) {}
            }
        }
    }
}

**
*
***
*
**
***
***
**
***
**
***
***
***
*
***
*
***
*
***
***
***

 

'Java > JAVA3' 카테고리의 다른 글

쓰레드의 동기화(synchronization)  (0) 2023.08.07
join(), yield()  (0) 2023.08.07
sleep(), interrupt()  (0) 2023.08.04
데몬 쓰레드(daemon thread), 쓰레드의 상태  (0) 2023.08.03
쓰레드의 우선순위, 쓰레드 그룹  (0) 2023.08.03