데몬 쓰레드
-
데몬 쓰레드가 아닌 다른 일반 쓰레드의 작업으 돕는 보조적인 역할을 수행
-
일반 쓰레드가 모두 종료되면 데몬 쓰레드는 강제적으로 자동 종료
-
예로 가비지 컬렉터와 자동 저장 기능
-
쓰레드 생성 후 실행 전에
setDaemon(true)
호출
실습1
public class TestDaemonThread1 extends Thread {
public void run() {
if (Thread.currentThread().isDaemon()) {// checking for daemon thread
System.out.println("daemon thread work");
} else {
System.out.println("user thread work");
}
}
public static void main(String[] args) {
TestDaemonThread1 t1 = new TestDaemonThread1();// creating thread
TestDaemonThread1 t2 = new TestDaemonThread1();
TestDaemonThread1 t3 = new TestDaemonThread1();
t1.setDaemon(true);// now t1 is daemon thread
t1.start();// starting threads
t2.start();
t3.start();
}
}
결과
user thread work
daemon thread work
user thread work
실습2
이미 실행 시킨 쓰레드를 데몬 쓰레드로 만들면 IllegalThreadStateException
발생 한다.
public class TestDaemonThread2 extends Thread {
public void run() {
System.out.println("Name: " + Thread.currentThread().getName());
System.out.println("Daemon: " + Thread.currentThread().isDaemon());
}
public static void main(String[] args) {
TestDaemonThread2 t1 = new TestDaemonThread2();
TestDaemonThread2 t2 = new TestDaemonThread2();
t1.start();
t1.setDaemon(true);// will throw exception here
t2.start();
}
}
결과
쓰레드이기 때문에 출력 순서는 변경될 수 있다.
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.setDaemon(Thread.java:1359)
at thread.TestDaemonThread2.main(TestDaemonThread2.java:13)
Name: Thread-0
Daemon: false