https://youtu.be/uY_xbLi_cSA?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp
📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.
[suspend(), resume(), stop()]
- suspend() - 쓰레드의 실행을 일시정지
- resume() - 일시정지된 쓰레드를 재개시키는 것
- stop() - 완전 정지 시키는 것(소멸로)
- 위의 세개의 메소드는 사용을 권장하지 않음(좋게 말해서 사용권장하지 않는 것이지 사용하면 안 됨)
- dead-lock 교착상태를 발생시키기 때문에 사용하지 않을 것을 권장한다.
- deprecated되었다!!
[실습]
package javaStandard;
public class Java13_10 {
public static void main(String[] args) {
RunImpEx10 r = new RunImpEx10();
Thread th1 = new Thread(r, "*");
Thread th2 = new Thread(r, "**");
Thread th3 = new Thread(r, "***");
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();
th2.stop();
Thread.sleep(2000);
th3.stop();
} catch (InterruptedException e) {}
}
}
class RunImpEx10 implements Runnable{
public void run() {
while(true) {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch(InterruptedException e) {}
}
}
}
- 쓰레드를 활동 중지시키고 다시 재개 시키고 완전 정지 시키는 과정을 보았다.
[자바에서 제공하는 method가 아닌 우리가 직접 만들어 사용할 수 있다.]
package javaStandard;
public class Java13_10 {
public static void main(String[] args) {
RunImpEx10 r = new RunImpEx10();
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();
th2.stop();
Thread.sleep(2000);
th3.stop();
} catch (InterruptedException e) {}
}
}
class MyThread implements Runnable{
volatile boolean suspended = false;
volatile boolean stopped = false;
Thread th;
MyThread(String name){
th = new Thread(this, name); // Thread(Runnable r, String name)
}
void start() {
th.start();r
}
void stop() {
stopped = true;
}
void suspend() {
suspended = true;
}
void resume() {
suspened = false;
}
public void run() {
while(true) {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch(InterruptedException e) {}
}
}
}
- volatile - 쉽게 바뀌는 변수
- 어려우니까 찾아보고 나중에 공부할 것.
'Java > 객체지향' 카테고리의 다른 글
[객체지향][쓰레드/thread] - 쓰레드의 동기화(synchronization) (0) | 2022.03.04 |
---|---|
[객체지향][쓰레드/thread] - join(), yield() (0) | 2022.03.03 |
[객체지향][쓰레드/thread] - sleep(), interrupt() (0) | 2022.03.02 |
[객체지향][쓰레드/thread] - 데몬 쓰레드, 쓰레드의 상태 (0) | 2022.03.01 |
[객체지향][쓰레드/thread] - 쓰레드의 우선순위, 쓰레드 그룹 (0) | 2022.03.01 |