Java/객체지향

[객체지향][쓰레드/thread] - suspend(), resume(), stop()

얄루몬 2022. 3. 2. 20:20

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 - 쉽게 바뀌는 변수
    • 어려우니까 찾아보고 나중에 공부할 것.