다연이네

[days27] 스레드 그룹과 데몬스레드 본문

Java

[days27] 스레드 그룹과 데몬스레드

 다연  2020. 10. 27. 22:03
반응형

스레드 그룹(ThreadGroup)
 1. 서로 관련된 스레드를 그룹으로 다루기 위한 것이다.
 2. 스레드 그룹 안에 스레드 그룹을 포함시킬 수 있다.
 3. 보안상의 이유로 스레드 그룹 개념이 도입되었다.
 4. 자신이 속한 스레드 그룹이나 하위 스레드 그룹은 변경할 수 있으나, 다른 스레드 그룹의 스레드를 변경할 수 없다.
 5. 모든 스레드는 스레드 그룹에 포함되어 있어야 한다.
 6. JVM -> main(main), system(가비지콜렉터)
   (이제껏 t1, t2 만든것들도 main스레드 그룹에 속한다)

데몬스레드(Daemon)

 1. 다른 일반 스레드의 보조 역할을 하는 스레드이다.
 2. 일반 스레드가 종료되면 강제로 데몬 스레드도 종료된다. 
 3. 일반 스레드를 실행하기 전에 (start) ...setDaemon(true)
 4. 데몬스레드가 생성한 자식 스레드는 자동으로 데몬스레드가 된다.

 

1. 데몬스레드를 사용하지 않고 스레드 종료하기

package review;

public class Re12 {

	public static void main(String[] args) {
		
		AutoSaveThread t1 = new AutoSaveThread();
		t1.start();
		
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		t1.interrupt();
		System.out.println(">5초 후 main 종료");

	}

}

//자동 저장하는 스레드
class AutoSaveThread extends Thread{
	public void save() {
		System.out.println("> 작업 내용을 일정 간격으로 자동 저장 중...");
	}

	@Override
	public void run() {
		try {
			while(true) {
			Thread.sleep(1000);
			save(); //1초 간격으로 save() 호출
			}
		} catch (InterruptedException e) {
			
			System.out.println("t1.interrupt(); 자동 저장 스레드 종료");
		}
	}
	
}

2. 데몬스레드 사용해 스레드 종료

package review;

public class Re12 {

	public static void main(String[] args) {

		AutoSaveThread t1 = new AutoSaveThread();
		t1.setDaemon(true); //메인 스레드가 죽으면 데몬스레드도 죽음 
		t1.start();

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


		System.out.println(">5초 후 main 종료");

	}

}

//자동 저장하는 스레드
class AutoSaveThread extends Thread{
	public void save() {
		System.out.println("> 작업 내용을 일정 간격으로 자동 저장 중...");
	}

	@Override
	public void run() {
		while(true) {
			try {
				Thread.sleep(1000);
			}

			catch (InterruptedException e) {

				System.out.println("t1.interrupt(); 자동 저장 스레드 종료");
			}
			save(); //1초 간격으로 save() 호출
		}
	}
}

 

반응형
Comments