setDaemon(), 设置一个线程为守护线程, 该线程不会单独执行, 当其他非守护线程都执行结束后, 自动退出。
public class ThreadTest {
public static void main(String[] args) throws Exception {
Thread t1 = new Thread() {
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.println(getName() + ":AAAAAAAAAA");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread t2 = new Thread() {
@Override
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println(getName() + ":BBBBBBBBB");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t1.setDaemon(true);
t1.start();
//t2.start();注释后不会有内容输出,因为守护线程t1不能单独执行
t2.start();
}
}
执行如上代码,输出:
守护线程t1的10条打印语句并没有全部执行,在线程t2执行完后就自动退出了。
垃圾回收机制就是守护线程一个应用的例子。
如果注释掉 t2.start();后,执行代码可能没有内容输出,因为主线程main没有执行的内容,而守护线程不会单独执行。